2009-11-12 4 views
1

현재 현재 작업 메서드 중 하나를 장식하고있는 다음 특성이 있습니다.MVC 응용 프로그램의 구성 파일을 통해 권한있는 역할을 동적으로 구성합니다.

[Authorize(Roles = "Admin")] 
public ActionResult DoAdminTask() 
{ 
//Do something 

    return View(); 
} 

현재 관리자 역할의 사용자 만이 방법을 호출 할 수 있지만 변경됩니다. 어쨌든 config 파일에 권한이 부여 된 역할의 목록을 하드 코딩하지 않고 저장할 수 있습니까?

EDIT : 역할은 시간 경과에 따라 변경되며 둘 이상의 역할에 액세스해야합니다. 즉, 두 역할 A의 사용자 또는 역할 B가 액세스 할 수 있습니다.

답변

5

표준 권한 부여 특성으로는이 작업을 수행 할 수 없지만 사용자 지정 권한 부여 특성을 사용하여 권한 부여 특성을 확장하고 구성 파일을 사용하여 컨트롤러/작업과 역할 집합 간의 매핑을 결정할 수 있습니다.

+0

그래, 더 많은 인터넷 검색 결과가 보이는 유일한 방법입니다. –

0

하지만 난 @의 tvanfosson의 제안을 복용 ...이 질문은 코드 샘플에 대한 답변을받을 자격

[Authorize(Roles = AppRoles.Admin)] 
0

대로

public static class AppRoles 
{ 
    public const string Users = "UsersRoleName"; 
    public const string Admin = "AdminRoleName"; 
} 

같은 것을 사용할 수 있습니다 다음 컨트롤러는 권한 부여 속성을 가질 수있다 AuthorizeAttribute 클래스를 확장 한 것은 다음과 같습니다. (비판은 환영 할만한 것입니다.)

AuthorizeFromConfiguration.cs :

public class AuthorizeFromConfiguration: AuthorizeAttribute 
{ 
    public new string Roles 
    { 
     get { 
      return base.Roles; 
     } 
     set { 
      var config = new ConfigurationBuilder() 
       .SetBasePath(Environment.CurrentDirectory) 
       .AddJsonFile("authorization.json") 
       .Build(); 
      base.Roles = config[value]; 
     } 
    } 
} 

authorization.json :

{ 
    "Parts": { 
     "Create": "contoso.com\\MyWebApp_CreateNewPart", 
     "Edit": "contoso.com\\MyWebApp_EditPart" 
    } 
} 

사용 예 :

[AuthorizeFromConfiguration(Roles = "Parts:Create")] 
public class CreateModel : PageModel 
{ 
    //... 
} 

참고 : set 대신 JSON 파일이 get 접근 자로 읽혀 지도록 논리를 변경하려고 시도해도 authorization.json 파일의 변경 사항이 적용되기 전에 웹 사이트를 재시작해야했습니다.

관련 문제