본문 바로가기

IT/mendix

빠른 개발자 되기(Become a Rapid Developer) - 9. 앱 보안

반응형

9.1 소개


정말 대단한 일을 해내셨습니다! LearnNow 교육 관리 앱의 첫 번째 스프린트를 거의 완료했습니다! 잠시 시간을 내어 스스로를 칭찬하고 여러분이 배우고 구축한 모든 것에 자부심을 느껴보세요.

앱 개발 프로세스의 다음 단계는 앱을 안전하게 만드는 것입니다. 액세스 규칙이라고도 하는 보안 규칙을 생성하여 이를 수행할 수 있습니다. 보안을 추가하면 앱을 사용할 수 있는 사람(사용자)과 앱으로 수행할 수 있는 작업(액세스)을 제어할 수 있습니다. 예를 들어, 교사나 교육생이 아닌 지미만 새 교육 이벤트를 예약할 수 있어야 합니다.  

무엇을 보호해야 하나요?
Mendix에서는 페이지, 마이크로플로우, 데이터(엔티티)의 세 가지에 보안 규칙을 적용합니다. 이를 액세스라고 합니다. 사용자는 페이지에 액세스할 수 있거나 액세스할 수 없습니다. 특정 페이지에 대한 액세스 권한이 없으면 해당 페이지로 이동하는 버튼이나 탐색 항목이 자동으로 표시되지 않고 사라집니다. 마이크로 플로우도 마찬가지입니다. 마이크로 플로우에 액세스할 수 없는 경우 이 마이크로 플로우를 트리거하는 버튼이 표시되지 않습니다. 특정 엔티티에 대한 생성 권한이 없는 경우 앱에 추가 버튼이 표시되지 않습니다. 삭제 버튼도 마찬가지입니다.

보안은 두 가지 계층으로 설정됩니다: 앱 보안과 모듈 보안입니다. 앱 보안은 보안 수준을 설정하고 전체 앱의 전반적인 보안 설정을 관리하는 곳입니다. 모듈 보안은 앱의 각 개별 모듈에 대한 페이지, 마이크로플로우 및 엔티티 액세스를 설정하는 곳입니다.

 보안 수준
Mendix 앱에는 세 가지 보안 수준이 있습니다:

꺼짐: 보안이 적용되지 않았습니다. 누구나 앱을 사용할 수 있으며 로그인할 필요가 없습니다. 새 앱을 만들 때 기본 설정입니다.

프로토타입/데모: 이 수준에서는 페이지 액세스 및 마이크로플로우 액세스를 설정해야 합니다. 누가 어떤 페이지를 방문할 수 있는지, 누가 어떤 마이크로플로우를 트리거할 수 있는지 정의해야 합니다. 이 보안 수준은 보안을 빠르게 확인(또는 데모)하는 데 유용합니다.

프로덕션: 엔티티 액세스를 구성하는 곳입니다. 여기에서 개체를 만들 수 있는지 여부(예: 교육 이벤트)와 개체를 삭제할 수 있는지 여부를 결정합니다. 또한 다른 사람이 개체 내부의 정보를 볼 수 있는지 여부와 해당 정보를 변경할 수 있는지 여부도 결정합니다. 프로토타입/데모 모드에서 이미 페이지 및 마이크로플로우 액세스를 구성한 다음 프로덕션 모드로 전환한 경우에는 엔티티 액세스만 정의하면 됩니다. 그러나 끄기에서 바로 프로덕션으로 전환하는 경우 페이지, 마이크로플로우 및 엔티티 액세스를 한 번에 모두 정의해야 합니다.

현재 무료 앱을 빌드 중이므로 Mendix 라이선스에 연결되어 있지 않습니다. 이러한 앱은 보안을 설정하지 않고 클라우드에서 실행할 수 있습니다. 하지만 라이선스가 있는 앱의 경우에는 약간 다르게 작동합니다. 라이선스가 있는 앱을 환경(최종 사용자가 액세스하는 앱 버전)으로 푸시하려면 프로덕션 보안을 켜고 완전히 구성해야 합니다!

 

9.2 사용자 및 모듈 역할

보안과 관련하여 가장 먼저 해야 할 일은 사용자 역할을 결정하는 것입니다. 앱의 사용자 유형에는 어떤 것이 있나요?

앱에는 로그인이 필요한 사용자가 액세스할 수 있습니다. 사용자가 로그인하면 사용자 역할이 할당됩니다. 할당된 사용자 역할은 여러 가지 방법으로 결정할 수 있습니다. 사용자는 해당 사용자 역할과 관련된 액세스 규칙의 구성에 의해 정의된 페이지, 마이크로플로우 및 데이터에만 액세스할 수 있습니다.

이러한 액세스 권한은 모듈 보안에서 관리됩니다. 각 모듈에 대해 특정 사용자가 할 수 있는 작업과 할 수 없는 작업을 모두 캡처하는 모듈 역할을 만들 수 있습니다. 특히 각 모듈 역할이 페이지에 액세스하고 마이크로플로우를 트리거할 수 있는지 여부와 데이터 개체를 조작할 수 있는 방법을 정의할 수 있습니다.

그런 다음 이러한 모듈 역할은 앱 수준에서 기존 사용자 역할에 연결됩니다. 특정 사용자 역할에 모듈에 할당된 모듈 역할이 없는 경우 전체 모듈이 자동으로 해당 사용자에게 제한됩니다. 해당 사용자는 모듈에 속한 페이지를 방문하거나 마이크로플로우를 트리거하거나 데이터를 보고 상호 작용할 수 없습니다. 사용자 역할은 모듈 역할에 대한 일종의 루트 역할을 합니다.  

잼 팩토리를 예로 들어 이 모든 것이 어떻게 작동하는지 살펴보겠습니다!

잼 공장에서 일하는 사람들은 모두 다른 사용자 역할을 가지고 있습니다:

CEO
생산 라인 직원
창고 직원
요리사
 
이들 모두는 직원 배지(사용자 역할)로 공장 건물에 액세스할 수 있지만 공장은 서로 다른 영역(모듈)으로 구성되어 있습니다:

생산 라인
창고
사무실
구내 식당(점심 공간 및 주방)
 
모든 직원이 반드시 이 모든 구역에 접근할 수 있는 것은 아닙니다. 또한 해당 구역에 액세스할 수 있는 권한이 있다고 해도 모두 동일한 작업을 수행할 수 있는 것은 아닙니다. 이는 할당된 모듈 역할에 따라 결정됩니다.

CEO는 공장의 모든 프로세스를 확인할 수 있어야 하므로 모든 영역에 액세스할 수 있습니다. 생산 라인 직원도 생산 라인에서 업무를 수행하고, 창고에서 물품을 가져오고, 인사 회의를 위해 사무실에 가고, 구내 식당에서 점심을 먹을 수 있어야 하므로 모든 영역에 액세스할 수 있습니다. 하지만 그는 CEO 사무실에는 출입할 수 없으므로 구체적인 출입 규칙이 다릅니다. 요리사는 생산 라인, 창고 또는 사무실에 접근할 수 없는데, 그 이유는 그곳에서 할 일이 없기 때문입니다. 그는 구내식당에서 모듈 역할만 합니다.

마찬가지로 지미의 앱도 마찬가지입니다:

앱에 어떤 모듈이 있는지 알아야 합니다,

 어떤 사용자 역할의 사용자가 앱에 로그인할지 알아야 합니다,

 어떤 모듈 역할(모든 특정 모듈에서)에 사용자 역할이 연결될 것인지.

앱에는 현재 중요한 세 가지 모듈이 있습니다: MyFirstModule, 시스템(변경할 수 없음) 및 관리입니다. 마켓플레이스 폴더 아래에는 템플릿에서 앱을 만들거나 마켓플레이스에서 모듈을 다운로드할 때 생성되는 다른 모듈이 있을 수 있지만 이 교육 범위에서 벗어납니다.

시스템 모듈은 앱의 핵심 구조를 정의하고 사용자 역할을 할당할 수 있는 모듈입니다. 이 모듈은 편집할 수 없지만 다른 모든 모듈이 구축되는 기반이 됩니다.

관리 모듈에서는 사용자가 사용자 이름과 비밀번호로 앱에 로그인할 수 있도록 사용자 계정을 만들 수 있습니다.

MyFirstModule은 이 학습 과정에서 구축한 모듈입니다.

관리 및 시스템 모듈은 앱이 생성될 때 모든 앱에 기본적으로 포함되며 앱이 제대로 작동하는 데 필요합니다. 각 모듈에는 MyFirstModule 외에 자체 보안 설정이 있습니다.

다른 모듈의 역할은 사용자가 해당 모듈에서 수행해야 하는 작업에 따라 달라집니다.

최종 사용자는 모듈 역할이 아닌 사용자 역할만 보거나 사용할 수 있습니다. 사용자 역할은 최종 사용자에게 할당됩니다. 모듈 역할은 사용자 역할에 할당되며 이 관계는 앱 수준에서 설정됩니다.

사용자 역할과 모듈 역할을 구분하는 목적은 각 모듈이 정의되거나 사용되는 프로젝트에서 독립적이고 독립적인 모듈을 만들기 위한 것입니다. 모듈은 다른 프로젝트에서 재사용할 수 있으며 Mendix 앱 스토어에 게시할 수 있습니다. 앱 스토어에서 모듈을 다운로드하는 사람은 모든 페이지와 엔티티에 대한 모든 액세스 규칙을 구성하는 데 몇 시간을 소비할 필요가 없으며, 이미 설정되어 있습니다! 새 모듈의 모듈 역할을 프로젝트의 사용자 역할에 할당하기만 하면 됩니다.

LearnNow 앱의 사용자 및 모듈 역할  

이러한 사용자 및 모듈 역할이 LearnNow 앱에 어떻게 변환됩니까? LearnNow TrainingManagement 앱의 경우 사용자 역할은 다음과 같습니다:

관리자(이 경우 Jimmy)
교사
연수생
 
향후에는 모든 인보이스 및 결제를 처리하는 인보이스 모듈로 LearnNow 앱을 확장할 수 있습니다. 이 경우 인보이스 모듈에서 자체적으로 일치하는 모듈 역할이 있는 재무 사용자 역할도 추가해야 합니다. 다른 모든 사용자에게는 이 모듈 역할이 할당되지 않으므로 모듈이 제한됩니다! 사용자 역할을 모든 모듈에 연결할 필요는 없습니다. 아래 이미지에 표시된 것처럼 Jimmy는 인보이스 프로세스에 관여하지 않으므로 사용자 역할이 인보이스 모듈의 어떤 모듈 역할에도 연결되지 않습니다.

각 사용자 역할에는 고유한 접근 권한 집합이 있습니다. 예를 들어 관리자는 코스 및 교육 이벤트를 생성, 편집 및 삭제할 수 있어야 합니다. 교육생은 기존 교육 이벤트와 코스 세부 정보만 볼 수 있어야 합니다. 교사는 무엇을 보고 수행할 수 있어야 하나요? 다음 과제를 계속 진행하여 알아보세요!

 

안내
사용자는 앱에서 둘 이상의 사용자 역할을 가질 수 있지만 이 학습 과정에서는 사용자에게 하나의 사용자 역할만 부여합니다.

 

9.2.1 앱 보안 설정  

LearnNow 앱의 사용자 역할을 설정할 시간입니다!

스토리를 실행 중으로 설정합니다: 관리자로서 앱의 보안을 유지하기 위해 데이터 보호 규칙을 준수합니다.

Mendix Studio Pro에서 보안 아이콘을 두 번 클릭하여 앱 보안 팝업 창을 엽니다. 상단의 앱 탐색기에서 찾을 수 있습니다.

보안 수준을 프로토타입/데모로 설정합니다. 창이 즉시 변경되어 관리할 수 있는 모든 보안 설정이 표시됩니다. 창을 계속 열어둡니다.

첫 번째 탭은 모듈 상태 탭입니다. 여기에서 모듈의 보안 상태를 확인할 수 있습니다. 아직 완료되지 않음에 열이 있는 한 보안 구성이 완료되지 않은 것입니다! 모든 구성이 예상대로 완료되면 앱 상태가 녹색으로 바뀌고 완료로 표시되어야 합니다.

 

참고: 멘딕스 스튜디오에서 프로젝트를 시작한 경우 엔티티 액세스가 이미 구성되어 있을 것입니다. 이 연습에서는 이 구성을 제거해야 합니다.

 

보안을 프로토타입/데모에서 프로덕션으로 설정하고 모듈 보안 편집을 클릭합니다.

엔티티 액세스 탭으로 이동하여 항목이 있는 경우 모두 제거합니다.이렇게 하려면 해당 항목을 선택하고 삭제를 클릭합니다.
확인을 클릭합니다. 앱 보안으로 돌아가서 보안을 프로토타입/데모로 다시 설정합니다. 확인을 클릭합니다.
또한 오류 창을 살펴보세요. 갑자기 몇 가지 오류가 발생했을 것입니다!

보안 수준을 프로토타입/데모로 설정했기 때문에 이제 보안이 아직 구성되지 않은 모든 페이지와 마이크로플로우에 대해 오류가 발생합니다. Mendix는 대부분을 자동으로 구성하지만 일부의 경우 어떤 사용자에게 액세스 권한이 있어야 하는지 확실하지 않아서 오류가 발생합니다. 페이지 및 마이크로플로우 액세스를 구성하면 오류가 다시 사라집니다.

 

9.2.2 모듈 역할 만들기

앱 탐색기의 MyFirstModule에서 도메인 모델 아래에 보안이라는 레이블이 붙은 새 문서가 나타납니다. 여기에는 MyFirstModule에 대한 모듈 보안 설정이 포함되어 있습니다. 두 번 클릭하여 엽니다. 모듈 보안 창에는 4개의 탭이 있습니다: 모듈 역할, 페이지 액세스, 나노플로우 액세스, 마이크로플로우 액세스입니다.

필요한 모듈 역할을 정의하는 것부터 시작하겠습니다: 관리자, 교사 및 연수생입니다. 사용자 모듈 역할의 이름을 교사로 변경합니다. 이렇게 하려면 사용자 모듈 역할을 선택하고 편집을 클릭합니다. 새로 만들기를 클릭하여 관리자 및 연수생에 대한 새 모듈 역할을 만듭니다.

확인을 클릭하여 모듈 보안 창을 닫습니다.

 

9.3 액세스 규칙

모듈 보안은 누가 무엇을 할 수 있는지를 결정하는 곳입니다. 페이지, 마이크로플로우 및 엔티티 액세스를 구성하여 이를 수행할 수 있습니다.

페이지 액세스


페이지 액세스는 액세스할 수 있는 페이지를 정의합니다. 탐색 항목(메뉴 모음/버튼)은 액세스 권한이 부여된 경우에만 항목을 표시합니다. 사용자에게 페이지에 대한 액세스 권한이 없는 경우 해당 페이지의 탐색 항목은 사용자에게 표시되지 않습니다. 마찬가지로 페이지에 특정 페이지를 표시하는 클릭 동작이 있는 버튼이 있지만 사용자에게 액세스 권한이 없는 경우 해당 버튼은 사용자에게 표시되지 않습니다.

페이지 액세스 설정은 페이지 및 모듈 역할을 보여주는 매트릭스로 표시됩니다. 각 조합에 대해 모듈 역할에 페이지에 대한 접근 권한이 있는지 여부를 표시할 수 있습니다. 페이지 속성의 표시 대상 설정을 사용하여 페이지를 편집하는 동안 이 정보를 편집할 수도 있습니다.

이 구성은 공개 페이지가 클라이언트에서 직접 열릴 때만 적용됩니다. 마이크로플로우에 의해 열리는 페이지는 해당 역할이 마이크로플로우를 실행하도록 허용된 경우에만 열립니다.  

마이크로플로우 액세스
어떤 모듈 역할이 어떤 마이크로플로우를 사용할 수 있는지 정의합니다. 클릭 시 마이크로플로우를 호출하는 동작이 있는 탐색 항목(메뉴 모음/버튼)은 사용자에게 지정된 마이크로플로우에 대한 액세스 권한이 부여된 경우에만 항목을 표시합니다.

페이지 액세스를 재정의합니다. 사용자가 페이지를 표시하는 활동이 포함된 마이크로플로우에 대한 액세스 권한이 있지만 해당 페이지에 대한 액세스 권한이 없는 경우에도 마이크로플로우가 해당 페이지를 열 수 있습니다. 따라서 마이크로 플로우에 대한 액세스 권한을 부여할 때는 마이크로 플로우 내부에서 어떤 일이 일어나는지 의식하여 너무 많은 것을 노출하지 않도록 주의해야 합니다.

동일한 매트릭스를 사용하여 마이크로플로우와 모듈 역할을 표시합니다. 각 조합에 대해 모듈 역할에 마이크로플로우에 대한 액세스 권한이 있는지 표시할 수 있습니다. 허용된 역할 속성을 사용하여 마이크로플로우를 편집하는 동안 이 정보를 편집할 수도 있습니다.

이러한 액세스 설정은 마이크로플로우가 클라이언트에서 실행될 때만 확인된다는 점에 유의하세요. 하위 마이크로플로우(다른 마이크로플로우 내부에서 호출되는 마이크로플로우)로 호출되는 마이크로플로우 또는 이벤트 핸들러로 설정된 마이크로플로는 사용자가 호출하는 마이크로플로우에 대한 액세스 권한이 있거나 관련 엔티티 이벤트가 사용자에게 허용된 경우 실행됩니다.

엔티티 액세스
엔티티 액세스는 각 모듈 역할에 대해 사용자가 엔티티의 개체를 생성, 읽기, 업데이트 및 삭제(CRUD)할 수 있는 권한이 있는지 여부를 정의합니다. 읽기는 정보를 볼 수 있는지, 업데이트는 정보를 변경할 수 있는지 여부를 의미합니다.

엔티티 액세스는 엔티티에 적용되는 액세스 규칙으로 구성됩니다. 각 액세스 규칙은 하나 이상의 모듈 역할에 차례로 적용됩니다.

엔티티의 액세스 규칙은 사용자가 해당 엔티티의 객체에 대해 수행할 수 있는 작업을 정의합니다. 사용자는 개체를 생성 및 삭제하고 구성원 값을 보고 편집할 수 있습니다. 멤버는 속성 또는 연결입니다. 또한 보기, 편집 및 제거에 사용할 수 있는 개체 집합은 XPath 제약 조건을 통해 제한할 수 있습니다.

모든 액세스 규칙은 하나 이상의 모듈 역할에 적용할 수 있습니다. 액세스 규칙은 해당 역할에 특정 액세스 권한을 부여합니다. 규칙은 추가적이므로 동일한 모듈 역할에 여러 액세스 규칙이 적용되는 경우 해당 규칙의 모든 액세스 권한이 해당 모듈 역할에 대해 결합됩니다.

9.3.1 페이지 및 마이크로플로우 액세스 설정  

이제 페이지 및 마이크로플로우 액세스를 구성하는 방법을 살펴보겠습니다!

관리자(Jimmy)는 항상 모든 페이지와 사용자 지정 로직에 액세스할 수 있어야 합니다. 그러나 교사와 연수생은 그다지 많은 것을 필요로 하지 않으며 모든 것에 액세스할 수 없어야 합니다.  

예를 들어

교사는 위치를 볼 수 있어야 하지만(트레이닝할 수 있는 위치를 알 수 있도록) 세부 정보를 편집할 수는 없습니다(데이터 일관성을 위해). 따라서 교사는 Location_Overview 페이지에는 액세스할 수 있지만 Location_NewEdit 페이지에는 액세스할 수 없어야 합니다.

트레이너는 의제를 확인할 수 있도록 TrainingEvent_Overview 페이지만 볼 수 있어야 합니다. 다른 모든 페이지는 접근이 제한되어야 합니다.

이 경우 트레이너에게 TrainingEvent_Overview 페이지를 기반으로 하는 역할 기반 홈 페이지를 제공하는 것도 좋은 방법입니다(아래에서도 설명할 것입니다). 사용자가 사용하거나 볼 수 없는 버튼이 많은 홈페이지는 산만하기 짝이 없습니다. 심지어 앱이 고장 났거나 잘 디자인되지 않았다는 인상을 줄 수도 있습니다. 더 나은 디자인을 만들 수 있습니다!

페이지 및 마이크로플로우 액세스 규칙 설정

 

먼저 각 역할에 대한 액세스 권한을 설정해 보겠습니다:
모듈 보안을 열고 페이지 액세스 탭으로 이동합니다.
아래 표의 정보를 사용하여 페이지 액세스 권한을 구성합니다(Y = 예, 액세스 권한 있음, N = 아니요, 액세스 권한 없음).

페이지 액세스를 구성한 후에는 Microflow 액세스 탭을 엽니다:

관리자만 교육 이벤트를 생성, 삭제 및 편집할 수 있어야 합니다.

교사와 연수생은 이러한 기능에 접근할 수 없어야 합니다.

목록의 모든 마이크로플로는 이러한 기능과 관련이 있습니다. 관리자에게 이 모든 기능에 대한 접근 권한을 부여합니다. 확인을 클릭하여 모듈 보안 창을 닫습니다.

9.3.2 사용자 역할 만들기

완료! 페이지 및 마이크로 플로우 액세스 설정을 마쳤습니다. 오류가 사라졌을 것이지만 걱정하지 마세요. 몇 가지 연습을 통해 더 많은 오류를 수정할 것입니다. 다음으로 LearnNow TrainingManagement 앱에 적합한 사용자 역할을 생성해야 합니다.  

앱 보안 설정 창에서 사용자 역할 탭을 엽니다. 이미 두 가지 사용자 역할이 있습니다: 관리자 및 사용자. 사용자 역할의 이름을 사용자에서 교사로 변경합니다. 이를 선택하고 편집을 클릭합니다. 이름을 교사로 변경하고 확인을 클릭합니다.  

연수생에 대한 새 사용자 역할이 필요합니다. 새로 만들기를 클릭하여 생성합니다. 다음과 같이 표시되는 확인란의 선택을 해제합니다:

MyFirstModule에서 모듈 역할 만들기를 선택 취소하는 것을 잊은 경우 이 모듈 역할이 이전 단계 중 하나에서 이미 만들어졌기 때문에 오류가 발생합니다.

확인을 클릭합니다. 이제 새로 만든 모듈 역할을 사용자 역할에 연결해야 합니다. 사용자 역할에 특정 모듈에 대한 모듈 역할이 없으면 전체 모듈에 액세스할 수 없다는 점을 기억하세요!

사용자 역할 탭을 열고 관리자 사용자 역할을 두 번 클릭하여 해당 속성을 엽니다. 다음 화면에는 관리자 사용자 역할에 연결된 모듈 역할 목록이 표시됩니다. 수정을 클릭하여 변경합니다. MyFirstModule에서 교사 모듈 역할이 선택되어 있을 수 있습니다. 이 모듈 역할을 선택 취소하고 대신 관리자 모듈 역할을 선택합니다. 이제 관리자는 모든 모듈에서 관리자 권한을 갖게 됩니다!

앱 보안으로 돌아올 때까지 확인을 클릭합니다.

교사 사용자 역할은 시스템 및 관리 모듈에서는 사용자이고 MyFirstModule에서는 교사여야 합니다. 연수생 사용자 역할도 시스템 및 관리 모듈에서는 사용자 유형이어야 하며 MyFirstModule에서는 연수생이어야 합니다. 시스템 및 관리 모듈에서는 교사와 연수생이 동일하며 둘 다 사용자이지만 MyFirstModule에서는 별도의 권한을 갖게 됩니다.
 
이제 사용자 역할이 다음과 같이 구성되어야 합니다:

이제 앱 상태가 녹색으로 표시되고 완료로 설정된 것을 보셨나요? 이는 프로토타입/데모 모드에서 페이지 액세스 및 마이크로플로우 액세스를 지정해야 하기 때문이며, 지금까지 이를 구성하셨기 때문입니다!  

데모 사용자 탭
앱을 테스트하려면 데모 사용자를 구성해야 합니다. 앱 보안에서 네 번째 탭은 데모 사용자 탭입니다. 데모 사용자를 사용하여 앱에서 사용자 역할을 빠르게 전환할 수 있습니다. 이렇게 하면 계속 로그아웃했다가 다시 로그인할 필요 없이 각 사용자 역할에 대한 보안 설정을 테스트할 수 있습니다.

이미 두 명의 데모 사용자가 설정되어 있습니다:

하나는 관리자용으로 demo_administrator라는 이름이 지정되어 있습니다.

하나는 demo_user라는 이름의 교사와 연결되어 있습니다. 이 데모 역할을 선택하고 편집을 누른 다음 이름을 demo_teacher로 변경합니다.

새로 만들기를 누르고 demo_trainee라는 데모 역할을 하나 더 만듭니다.  이 데모 역할을 만들 때 엔티티를 Administration.Account로 설정해야 합니다.

데모 역할을 사용하여 앱을 테스트할 준비가 되었습니다. 로컬에서 실행을 누르고 앱 미리 보기를 누르세요! 앱에 들어가려면 비밀번호를 사용하여 MxAdmin으로 로그인합니다.

앱의 오른쪽 패널에 사용자 아이콘이 보이나요? 이 아이콘을 눌러 데모 역할 간에 전환하고 동작을 확인합니다.

역할 기반 홈페이지 설정
연수생이 클릭할 수 없는 버튼이 많은 기본 홈 페이지에 머무는 것을 방지하기 위해 역할 기반 홈 페이지를 통해 액세스 권한이 있는 페이지로 바로 이동하도록 하겠습니다. 이 작업은 탐색 설정에서 수행할 수 있습니다.

탐색 화면을 엽니다(앱 탐색기의 앱 보안 아래에서 찾을 수 있음). Mendix Studio의 탐색 관리와 유사합니다.

역할 기반 홈페이지에서 편집을 클릭한 다음 새로 만들기를 클릭하여 교육생에 대한 역할 기반 홈페이지를 생성합니다. 교육생을 클릭한 다음 선택을 클릭합니다.

이제 대상 선택을 클릭하여 교육생 사용자 역할의 홈 페이지가 될 페이지를 선택합니다. 이 페이지는 TrainingEvent_Overview 페이지여야 합니다.

이제 로컬에서 앱을 다시 실행하고 demo_trainee 역할로 전환하여 어떤 페이지가 열리는지 확인하세요!

한편, 오류 창으로 돌아옵니다.
모든 것이 잘 되었다면 오류가 0이 되어야 합니다. 굉장하죠! 프로토타입/데모 보안 수준을 완전히 구성했습니다. 이제 프로덕션 보안으로 전환하고 엔티티 액세스를 구성할 차례입니다!

앱 보안을 열고 보안 수준을 프로덕션으로 설정합니다.

이제 프로덕션 모드의 앱 상태가 노란색인 완료되지 않음으로 표시되는 것을 보셨을 것입니다. 이는 프로덕션 보안 수준에서 엔티티 액세스 권한을 지정해야 하기 때문입니다.

 

9.3.3 엔티티 액세스 설정

엔티티 액세스를 설정하려면 보안 수준을 프로덕션으로 설정해야 합니다.

이번에는 훨씬 더 긴 오류 목록이 표시됩니다. 도메인 모델의 모든 엔티티에 대해 이 엔티티의 개체를 만들거나 삭제할 수 있는 사용자를 지정해야 하기 때문입니다. 그런 다음 각 속성과 연결을 읽고(참조) 업데이트(편집)할 수 있는 사용자를 지정해야 합니다!

모듈 보안을 다시 엽니다. 새 탭이 나타납니다: 엔티티 액세스 탭! 그것을 엽니다. 이제 각 모듈 역할이 도메인 모델의 각 엔티티와 상호 작용할 수 있는 방법을 관리하는 각 모듈 역할에 대한 새 액세스 규칙을 만들어야 합니다.

관리자
관리자에 대한 액세스 규칙은 다시 간단합니다: 지미는 모든 것을 할 수 있어야 합니다! 새로 만들기를 클릭하여 관리자에 대한 액세스 규칙을 만듭니다. 모든 엔티티를 선택하고 확인을 클릭합니다. Jimmy는 모든 곳에서 생성, 삭제, 읽기 및 업데이트 액세스 권한을 갖게 되므로 모든 엔터티에 대한 규칙을 한 번에 설정할 수 있습니다.

관리자 모듈 역할을 선택합니다. 또한 새 객체 생성 허용 및 기존 객체 삭제 허용에 체크합니다. 구성원 읽기 및 쓰기 권한을 읽기, 쓰기로 설정합니다. 확인을 클릭합니다.

이제 보안 화면의 엔티티 액세스 탭에 각 엔티티에 대해 하나씩 총 6개의 액세스 규칙이 표시됩니다. 멋진 지름길이지 않나요?

 

교사
교사는 개체를 생성할 수 없고 삭제할 수도 없어야 합니다. 속성 내부의 정보에 대해서는 교사가 모든 정보를 볼 수 있지만(읽기), 변경(쓰기)은 할 수 없어야 합니다.  이를 위해서는 각 엔티티를 개별적으로 구성해야 합니다. 새로 만들기를 클릭하여 새 접근 규칙을 생성합니다. 코스 엔터티를 선택합니다. 이제 엔터티 접근을 정의할 수 있는 다른 화면으로 이동합니다. 여기에서 속성별로 접근 권한을 정의할 수 있습니다. 교사 역할을 선택하고 새 학습자에 대한 기본 권한을 없음으로 설정합니다. 그런 다음 구성원 액세스 권한을 읽기로 설정합니다. 확인을 클릭합니다.

새 회원에 대한 기본 회원 권한을 없음으로 설정하는 것이 가장 좋습니다. 기본 권한을 설정하면 이 선택 항목이 나중에 만드는 모든 새 속성 또는 연결에 대한 액세스 규칙으로 자동으로 할당되므로 의도한 것 이상의 권한이 부여될 수 있습니다. 대신 이 옵션을 없음으로 두면 각 새 멤버에게 개별적으로 액세스 권한을 부여해야 합니다. 점진적으로 앱을 강화하고 필요한 보안에 대해 의식적으로 생각하면 더 안전한 앱을 만드는 데 도움이 됩니다. 이 모범 사례에서 벗어나 새 구성원의 기본 권한을 읽기 또는 읽기/쓰기로 설정하면 의도치 않게 너무 많은 권한을 부여할 수 있습니다. 필요한 권한만 부여하고 그 이상은 허용하지 마세요!

위치, 등록, 교사, 연수생 및 교육 이벤트 엔티티에 대해 이전 단계를 반복합니다.

연수생
마지막으로 중요한 것은 연수생 모듈 역할입니다. 트레이너는 트레이닝 이벤트 엔티티 내부의 정보만 읽을 수 있어야 합니다. 그 외에는 아무것도 할 수 없습니다! 생성, 삭제 및 쓰기는 제한되어 있습니다. 또한 총 등록 횟수도 트레이너에게 숨겨야 합니다.

새로 만들기를 클릭하여 새 액세스 규칙을 만듭니다. 교육 이벤트 엔티티를 선택합니다. 액세스 권한을 설정합니다.

확인을 클릭하고 오류 창을 살펴봅니다. 대부분의 오류를 제거했지만(다행히도!) 아직 4개가 남아 있습니다:

처음 세 가지 오류는 교육생에게 TrainingEvent_Course, TrainingEvent_Location 및 TrainingEvent_Teacher 연결에 대한 읽기 권한을 부여했지만 이러한 엔티티 내부의 정보에 대한 액세스 권한은 부여하지 않았기 때문에 발생합니다. 이러한 오류를 해결하려면 교육생에게 표시되는 코스, 위치 및 교사의 속성에 대한 읽기 권한을 교육생에게 부여해야 합니다. 이러한 속성은 코스 제목, 위치 이름 및 교사 이름입니다.

계속해서 이러한 접근 규칙을 생성합니다. 이제 전체 목록이 다음과 같이 표시되어야 합니다:

마지막 오류는 Jimmy가 교육생에게 총 등록 수 속성에 대한 읽기 액세스 권한을 부여하고 싶지 않지만 교육생이 액세스할 수 있는 한 페이지에 이 속성이 표시되고 있기 때문에 남아 있습니다. 이로 인해 보안 충돌이 발생하는데, Mendix는 여기서 무엇을 하려는지 잘 모르기 때문입니다! 연수생이 이 내용을 보길 원하시나요, 원하지 않으시나요? 다행히도 조건부 표시라는 이 모순을 쉽게 해결할 수 있는 방법이 있습니다. 오류를 두 번 클릭하면 해당 속성이 표시되는 페이지로 빠르게 이동합니다. 속성이 표시되는 줄이 자동으로 선택됩니다.  
해당 줄을 마우스 오른쪽 버튼으로 클릭하고 표시 조건 편집...을 클릭합니다. 선택한 역할에 대한 텍스트 표시 확인란을 선택하고 표시되는 옵션에서 연수생을 선택 취소합니다. 이렇게 하세요:

마지막으로 확인을 클릭합니다.
놀랍게도 모든 오류가 사라졌습니다! 그거 아세요? 이제 보안이 완전히 구성되었습니다! 축하합니다.

 

9.4 앱 보안 사용자 설정

아직 살펴보지 않은 나머지 보안 옵션 몇 가지를 살펴보겠습니다. 이 모듈의 앞부분에서 모듈 상태 및 사용자 역할 탭에 대해 설명하면서 앱 보안 설정 창에 이미 익숙해졌을 것입니다. 다른 탭의 기능을 살펴봅시다!

관리자 탭
앱 보안 설정 창의 세 번째 탭은 관리자 탭입니다. 여기에서 마스터 관리자 로그인 자격 증명을 관리합니다. 이 관리자의 이름과 사용자 역할이 설정됩니다.

관리자의 비밀번호를 생성합니다. 로컬 배포의 경우 정책이 적용되지 않으므로 임의의 비밀번호(예: 1)를 사용할 수 있습니다.

이름: MxAdmin

비밀번호: 1(로컬 배포에만 해당)

사용자 역할: 관리자

애플리케이션이 배포되면 이러한 자격 증명으로 사용자가 생성됩니다. 설정된 비밀번호는 로컬 배포에만 적용되며, Mendix Cloud에는 적용되지 않습니다. 각 환경에 대해 배포 후 관리자 사용자에 대한 강력한 비밀번호를 설정해야 합니다. 보안을 설정한 후에는 마스터 관리자 계정을 사용하여 앱에 액세스하고 더 많은 계정을 만들 수 있습니다.

 

익명 사용자 탭
다음 탭은 익명 사용자 탭입니다. 익명 사용자를 켜면 로그인하지 않고도 앱에 액세스할 수 있습니다. 주의하세요! 익명 사용자가 앱에 액세스할 수 있도록 허용하는 경우 액세스 권한이 매우 제한된 '익명' 사용자 역할이 할당되었는지 확인하세요! 그렇지 않으면 누가 내 데이터에 접근할 수 있을지 모릅니다.

비밀번호 정책 탭
마지막 탭은 비밀번호 정책입니다. 여기에서 사용자의 비밀번호를 얼마나 엄격하게 관리할지 결정할 수 있습니다. 최소 길이는 얼마인가요? 비밀번호에 숫자나 특수 문자를 포함해야 하나요? 대소문자 혼용이 필요한가요? 앱이 민감한 데이터를 처리하는지 여부 등 구축 중인 앱 유형에 따라 여기에서 허용 범위를 조정할 수 있습니다.

 

9.4.1 보안 테스트

마지막 스토리를 완료로 설정하고 지미에게 앱을 사용해 볼 수 있다고 말하기 전에 마지막으로 해야 할 일은 보안을 테스트하는 것입니다!

 앱을 실행하고 방문합니다. 지금은 홈페이지로 이동하지 않고 로그인 페이지로 이동합니다. 마스터 관리자 자격 증명을 사용하여 앱에 로그인합니다: 사용자 이름 'MxAdmin', 비밀번호 '1'.

애플리케이션을 확인하세요! 화면 오른쪽에 있는 사용자 전환기를 사용하여 다른 사용자 역할로 전환할 수 있습니다. 교사에게는 객체를 생성할 수 있는 권한이 없으므로 개요 페이지에 추가 버튼이 표시되지 않아야 합니다.  demo_trainee 사용자를 선택하면 역할 기반 홈페이지로 이동하게 되며 탐색 모음에는 하나의 아이콘만 표시됩니다.

작업을 팀 서버에 커밋하고 사용자 스토리를 완료로 설정합니다.

 

요약
축하합니다! 이제 사용자 친화적이고 효과적이며 일관성 있고 안전한 앱이 생겼습니다.

이 마지막 모듈에서 많은 새로운 것을 배웠습니다. 다음은 학습한 내용을 간략하게 요약한 것입니다:

데이터 보안의 의미와 앱에 적용하는 방법
사용자 및 모듈 역할의 정의와 생성 방법
액세스 규칙을 설정하여 특정 사용자만 앱을 보거나 편집할 수 있도록 허용하는 방법
앱 보안을 구성하는 방법
앱의 보안을 테스트하는 방법

다음 모듈에서는 앱에 모바일 전용 기능을 추가하고 사용자가 이동 중에도 특정 페이지에 액세스할 수 있도록 허용하는 방법에 대해 알아봅니다!  

리소스 탭에서 모듈 9의 솔루션이 포함된 mpk를 찾을 수 있습니다.

 

https://academy.mendix.com/link/modules/96/lectures/817/9.5-Summary

 

Mendix

 

academy.mendix.com

 

반응형