2009-09-21 1 views
0

필자는 몇 가지 모델을 가지고 있는데, 액션 링크 (새로운, 세부 사항, 편집, 삭제) 및 특정 모델에 대한 특정 아이콘 만 표시하고자합니다. 이러한 아이콘 링크는 사용자가 작업을 수행 할 수있는 권한이있는 경우에만 표시되어야합니다. 권한은 역할에 따라 결정되지만 명시 적으로 필요한 역할은 한 곳에서만 작성됩니다.권한 인식 (아이콘) 모든 모델의 작업 링크 : 어떻게?

아이콘을 표시하고 액션 메소드를 "보호"하기 위해 동일한 논리를 사용하고 싶으므로 Foo 역할을 사용하여 lolcatz를 편집해야하는 경우, 이제이를 Bar 역할로 변경하고 싶습니다. 한 가지만 바꾸면됩니다.

는이를 구현하는 방법에는 여러 가지가있다, 나는 진행 방법에 대한 확실 해요.

나는 결정 권한, 링크, 아이콘, 하나의 액션 텍스트에 대한 책임 ModelAction 클래스를 쓸 수, 나는 부모 클래스와 여러 하강을 쓸 수 있도록 일부 ModelActionsCollection는 단일 모델에 대한 모든 가능한 조치를 수집 사람.

나의 의심은 :

  • 는 어떻게 ModelActionsCollection와 모델을 연결해야

    ? SomeStaticClass.GetModelActionsCollection(someModel)과 같은 해시 또는 정적 클래스를 사용해야하나요? 또는 typeof(someModel) 또는 "className"이거나 무엇입니까?

  • 방법을 어떻게 장식해야합니까? 다른

    [MyAuthorize("action", "model")] 
    public ActionResult action(...) 
    

    또는 무엇인가 : 내가 좋아하는 뭔가를 작성해야?

  • 는 괜찮 직접 이러한 클래스 '방법 안에 현재 인증 된 사용자에 액세스 할 수있다, 또는 그들이 매개 변수로 사용자를 받아야한다?

  • 이 클래스가 속한 네임 스페이스는 무엇입니까? 그들은 모델입니까? 도우미? 또는 무엇을?

  • 하고, 마지막으로 : 사람이 이미 재사용 가능한 방법으로이 모든 일을했다?

답변

0

우리는 정확히이

는 권한 유형 플래그와 CSS를 예에서 아이콘에 대한 문자열과 액션을 장식 할 [ActionModelPermission (대해서 typeof (ContactModel), PermissionTypes.Create | PermissionTypes.Edit, "typeIcon의 typeContact")]

ActionModelPermission, PermissionTypes 및 ContactModel는 우리의 프로젝트의 모든 클래스는. 모든 actionmodelpermissions를 초기화 할 경우

그런 다음 우리는 공급 람다에서 방법을 찾아 권한 검사를 수행하고,

+0

좋아 그것의 적절한 CSS 클래스와 링크를 구축 우리 자신의 ActionLink 도우미, 그래서? Application_Start에서 직접 컨트롤러 내부에 있습니까? – giorgian

+0

링크가 렌더링 될 때 ActionModelPermission 권한 속성을 가져 오는 동작을 반영합니다. 이는 렌더링 된 HTML에 사용할 링크 및 CSS 클래스에 필요한 권한을 알려줍니다. 그런 다음 ViewData에 캐시 된 현재 사용자 권한을 확인하여 필요한 권한이 부여되었는지 확인합니다. –

관련 문제