2011-04-01 5 views
2

먼저 EF 4.1을 사용하고 저장소 및 작업 단위 패턴을 사용하고 있습니다. 우리는 웹 응용 프로그램을 만들고 있습니다.Entity Framework 4.1을 사용하여 응용 프로그램 권한을 처리하기위한 전략

EF 4의 코드 첫 번째 접근 방식을 사용하여 프로젝트를 시작합니다. 현재 데이터베이스는 존재하지 않습니다. 따라서 사용자가 액세스 할 수있는 데이터와 그 논리가 내 프레임 워크에 있어야하는 위치를 처리하는 전략을 고안하려고합니다.

사용자가 시스템에 로그인하여 시스템의 사용자를 만들고 싶다고 가정 해 보겠습니다. 그 양식은 새 사용자를 어떤 종류의 역할에 넣을 수있는 필드를 가지고 있습니다. 이 "새 사용자"를 생성하는 사용자는 특정 유형의 역할 (사용자, 작성자 및 뷰어) 만 볼 수 있지만 관리자 역할은 있지만이 사용자에게는 액세스 할 권한이 없다는 것을 알고 있습니다. 그 역할 목록을 제공하는 서비스를 호출 할 때 모든 역할을 다시 가져오고 일종의 권한 집합을 기반으로 새 목록을 작성하고 싶습니까?

나는이 논리의 일부를 내 저장소에 가지고 있다는 생각에 고심하고 있지만 실제로 거기에 맞지 않는다고 생각합니다.

답변

2

보안은 여러 수준에 있어야합니다,하지만 난 모든 저장소보다 높은 것 같아요. 귀하의 UI/메뉴는 사용자가 액세스 할 수없는 기능을 노출해서는 안되지만, 사용자가 시도하고있는 작업을 수행하기 위해 액세스 권한이있는 응용 프로그램 서비스 계층에서 서버를 확인해야합니다.

사용자 역할의 경우 데이터 모델에 역할 관계를 구축 할 수 있지만 데이터베이스에서 모두 다시 가져 와서 캐시하고 코드 논리로 목록을 필터링합니다. 하지만 문제는 사용자가 추가하거나 추가 할 수없는 역할을 어떻게 알 수 있습니까? 특정 번호를 사용하여 공백을 남기고 특정 역할의 사용자 만 자신의 역할과 동일한 또는 그보다 작은 역할의 사용자를 만들 수 있습니다. 예를 들어

:

RoleID Role 
    1 Peon 
    5 Common Folk 
    10 King 
    15 Supreme Master of the Universe 

그래서 어쩌면 유일한 왕과 SMU의 새로운 사용자를 추가 할 수있는 기능을 가지고있다. SMU는 다른 SMU, Kings, Common Folk 및 Peons를 만들 수 있습니다. 킹스는 SMU를 제외하고 똑같이 할 수 있습니다. ID의 틈새는 나중에 번호를 매김없이 더 많은 역할을 추가 할 수있는 기능을 제공합니다.

2

컨트롤러는 메서드에 대해 서로 다른 Authorize 특성 선언을 가질 수 있으며 사용자가 mvc 프레임 워크에서 예외를 발생시키지 않고 호출 할 수있는 역할을 지원합니다.

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

+0

세분화 된 데이터 필터링을 수행 할 수 있습니까? 속성이 전체 속성에 영향을 미쳤다고 생각 했나요? 역할 컬렉션을 볼 수는 있지만 제한된 집합 만 볼 수 있습니다. – DDiVita

+0

@DDiVita, 내가 당신의 질문을 이해한다면 - 대답은 '아니오'입니다. 당신은 할 수 없습니다. 이것은 전혀 또는 전혀 종류의 접근법이 아닙니다. 그러나 데이터 검색은 몇 가지 컨트롤러 메소드로 구분할 수 있습니다. 각 컨트롤러 메소드는보다 세밀한 접근을 위해 서로 다른 액세스 권한 세트를 가지고 있습니다. – dexter

관련 문제