0

저는 현재 사용자 테이블, 역할 테이블 및 사용자 - 역할 연관 테이블이있는 시스템을 가지고 있습니다.이 테이블에서는 한 명의 사용자가 여러 역할 (예 : Admin, BasicUser 등)에 연결될 수 있습니다. 이러한 역할을 기반으로 액션 메소드를 인증 할 수 있습니다. 이것은 Identity 프레임 워크에서 가져온 것입니다.ASP.NET MVC에서 역할 내에서 권한을 설정하는 방법은 무엇입니까?

이제 역할에 대한 것보다는 동작 방법을 제한 할 수 있도록 권한에 대한 지원을 추가하고 싶습니다. 예를 들어 컨트롤러에서 "쓰기"권한을 가진 사람 만 성공적으로 수행 할 수있는 HTTPPost 작업이있을 수 있습니다.

역할에 권한을 할당 할 수 있도록 변경해야 할 사항은 무엇입니까? I.E. "Write"및 "Read"권한을 갖기 위해 "Admin"역할을 선택하고 "BasicUser"역할은 "Read"권한 만 할당하려고합니다. 이렇게하면 관리자는 쓰기 권한으로 허용되는 모든 메소드에 액세스 할 수 있지만 BasicUser는 액세스 할 수 없습니다.

"Privilege"라는 다른 테이블과 그와 역할 사이의 연결 테이블과 역할의 권한을 설정하는 코드를 만들려면 어떻게 권한을 필터로 사용할 수 있습니까? 예를 들어 아래 작업은 사용자가 "쓰기"권한이 부여 된 역할로만 수행되도록 허용해야합니다.

[Write] 
public ActionResult Create() 
{ 
    return View(); 
} 

고맙습니다.

답변

1

같은 식으로 AuthorizeAttribute 작품, 당신은 그것에서 상속하는 사용자 지정 권한 부여 특성을 만들 수 있습니다

public class AuthorizePrivilegeAttribute : AuthorizeAttribute 
{ 
    // Custom property 
    public string Privilege { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Reusing default authentication. 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     {     
      return false; 
     } 

     return YourCustomCode.HasPrivilege(this.Privilege))  
    } 
} 

를 그런 다음 방법의 상단에 그것을 사용 : 시작점에 대한

[AuthorizePrivilege(Privilege = "Write")] 
public ActionResult Create() 
{ 
    return View(); 
} 
+0

감사합니다. 이 기술을 사용하면 YourCustomCode 클래스에 역할과 권한 간의 연결이 있는지 확인하는 코드가 포함됩니까? I.E. 모든 데이터베이스 코드? – ITWorker

+0

바로! 대답에 만족한다면 답을 표시하는 것을 잊지 마십시오. – bsoulier

관련 문제