2016-09-20 1 views
2

dbcontext에 액세스하여 사용자 정의 정책 기반 권한 부여에서 내 테이블 데이터와 세션을 가져올 수 있습니까? 누구나 그것을 달성하는 방법을 도울 수 있습니까?사용자 정의 정책 기반 권한 부여에서 dbcontext & session에 액세스하는 방법

 services.AddAuthorization(options => 
     { 
      options.AddPolicy("CheckAuthorize", 
           policy => policy.Requirements.Add(new CheckAuthorize())); 
     }); 

     services.AddSingleton<IAuthorizationHandler, CheckAuthorize>(); 


public class CheckAuthorize : AuthorizationHandler<CheckAuthorize>, IAuthorizationRequirement 
{ 
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CheckAuthorize requirement) 
    { 

     if() //check session to verify user is logged in or not 
     { 
      //redirect to login page 
     } 
     else 
     { 
      if()//access dbcontext get data from database table to validate user access 
      { 
       //redirect to access denied page 
      } 
     } 
     throw new NotImplementedException(); 

    } 
} 

답변

2

정책 DI

그래서, 당신의 DB 컨텍스트를 가정하면 당신은이 작업을 수행 할 때 당신이 당신의 요구 사항은 별도 확인해야한다는

public class CheckAuthorizeHandler : AuthorizationHandler<CheckAuthorizeRequirement> 
{ 
    MyContext _context; 

    public CheckAuthorizeHandler(MyContext context) 
    { 
     _context = context; 
    } 

    protected override Task HandleRequirementAsync(
     AuthorizationHandlerContext context, 
     MyRequirement requirement) 
    { 
     // Do something with _context 
     // Check if the requirement is fulfilled. 
     return Task.CompletedTask; 
    } 
} 

주처럼 뭔가를 할 수 DI에 사용할 수 있습니다 수업에서는 CheckAuthorize : AuthorizationHandler<CheckAuthorize>, IAuthorizationRequirement을 할 수 없으므로해야 할 것입니다.

public CheckAuthorizeRequirement : IAuthorizationRequirement 
{ 
} 

마지막으로 귀하는 DI 시스템에 귀하의 처리기를 등록해야합니다.

+0

귀하의 답변에 감사드립니다. 나는 그것을 통해 UR 코드를 기반으로해볼 것이다. 그렇다면 세션 값을 얻고 리디렉션하는 것은 어떻습니까? – WolfPack

+0

이것은 모두 문서화되어 있습니다. Session은 DI 서비스 인 ISession입니다. 리디렉션의 의미를 알 수 없습니다. – blowdart

+0

모두 dbcontext & Session은 DI 서비스입니다. 리디렉션은 사용자 액세스 유효성 검사가 거 ~ 인 경우 사용자를 로그인 페이지로 가져오고 거부 된 페이지에 액세스 함을 의미합니다. – WolfPack

관련 문제