2

롤 기반 인증을 적용해야하는 컨트롤러 및 관련 뷰가 있습니다. 내가 그 기본 클래스에서 상속 모든 컨트롤러가 로그인 후에 만 ​​사용할 수 있도록 그것에 [권한] 속성 정의와 기본 컨트롤러를 가질 생각입니다. 나는 이것이 작동하는지 테스트했다. 이것이 최선의 관행인지 아니면이 접근법에서 앞으로 나아갈 구멍이 있을지 확실하지 않습니다.asp.net MVC 컨트롤러 및 인증

앞으로 특정 역할의 사용자 만 특정 페이지에 액세스 할 수 있어야합니다. 역할 목록은 데이터베이스 테이블에 있습니다. 따라서 모든 관련 컨트롤러를 변경하는 대신 상속받은 기본 컨트롤러에서 변경해야합니다. 이 일을하는 것이 올바른 방법일까요?

감사합니다.

답변

7

임의의 수의 Authorize 속성을 결합 할 수 있습니다.

당신은 당신의 기본 컨트롤러에 Authorize 속성과 (역할을 지정하는 예를 들어) 다른 컨트롤러에 대한보다 구체적인 하나

(역할 또는 사용자 지정) 컨트롤러 액션에 가장 구체적인 하나를 사용할 수 있습니다 즉,
[Authorize] 
public class BaseController : Controller 
{} 

[Authorize(Roles="Administrator")] 
public class AdminController : BaseController 
{ 
    [Authorize(Roles="SuperUser")] 
    public ActionResult SuperSecret() 
    {} 
} 

모든 속성을 검사하고 속성 중 하나라도 실패 할 경우에만 액세스 권한을 취소합니다.

앞으로 특정 역할의 사용자 만 특정 페이지에 액세스 할 수 있어야합니다.

역할 기반 인증이 작동하는 방식입니다.

역할 목록은 데이터베이스 테이블에 있습니다.

OnPostAuthenticate in global.asax의 사용자 정의 IPrincipal에 역할을로드하십시오.

관련 컨트롤러를 모두 변경하는 대신 상속받은 기본 컨트롤러에서 변경합니다.

이 요구 사항을 따르지 않습니다. 컨트롤러에 역할을 지정하지 않으시겠습니까?

+0

주제 초보자는 자신의 모든 컨트롤러에 역할 목록을 첨부하지 않고 다른 그룹으로 역할을 지정하는 것을 피하고자했습니다.그렇지 않으면 제안은 완벽합니다. (인증 시나리오의 기본 설정입니다) – Zruty

+0

안녕하세요, global.asax의 OnPostAuthenticate 메소드에서 말하는 사용자 지정 IPrincipal을 사용하는 예가 있습니다. 내가 아는 한 iPrincipal은 HttpContext.Current.User 객체를 저장합니다. AppRoles 테이블의 역할을 AppRoles 테이블에 어떻게 할당합니까? – user20358

+0

여기에 몇 가지 예가 있습니다. 'custom principal onpostauthenticate'을 검색하거나 MSDN에서'IPrincipal'에 대해 읽으십시오. – jgauffin

1

컨트롤러에 기본 컨트롤러 클래스를 사용하는 것은 괜찮습니다.

그러나 컨트롤러의 계승을 역할 계층에 연결해야한다고 생각하지 않습니다. 그것은 나에게 깨끗해 보이지 않는다. 약간 다른 OnAuthorization 행동

class NormalUserRolesAttribute: AuthorizeAttribute 
class AdvancedUserRolesAttribute: AuthorizeAttribute 
class AdminUserRolesAttribute: AuthorizeAttribute 

다음 해당 속성을 사용하여 컨트롤러를 표시 :

내가 좋아하는, 속성의 상속 트리를 구현하는 것입니다.

+0

'[Authorize (Roles = "AdvancedUser")]'와는 다른 점을 설명 할 수 있습니까? 너는 단지 물건들을 복잡하게 만든다. – jgauffin

+0

답변에 대한 내 의견을 참조하십시오 :) – Zruty

+0

아직도. 당신의 속성은 제 제안과 똑같습니다. 나는 .NET에서 모든 보안 기능에 의해 사용되기 때문에'IPrincipal'에 역할을 로딩하는 것을 권장합니다. – jgauffin