2012-03-22 2 views
2

사용자가 선택한 스키마에 따라 여러 스키마 중 하나에 연결할 수있는 ASP.NET MVC App을 작성하고 있습니다. 사용자는 로그인하기 전에 데이터베이스를 선택한 다음 해당 데이터베이스에 대해 인증됩니다.다중 역할 공급자가있는 특성의 인증

web.config에 몇 가지 역할 공급자를 추가했습니다. 각 공급자는 사용 가능한 각 데이터베이스에 해당하는 다른 연결 문자열을 사용하여 추가되었습니다.

나는 내가 Roles.providers 컬렉션 역할 공급자에 액세스 할 수 있는지 이해하지만 난 내 컨트롤러

내 컨트롤러에서 [권한 부여] 속성에 의한 것으로 사용자가 어떤 역할 공급 업체를 선택할 수 있습니다 이해가 안 돼요 다음과 같이 표시하십시오.

namespace MyApp.Controllers 
{ 
    [Authorize(Roles = "admin")] 
    public class AdminController : Controller 
    { 

기본 롤 공급자에 대한 사용자 역할을 확인한다고 가정합니다. [권한 부여] 속성에 사용할 역할 공급자를 런타임에 어떻게 선택할 수 있습니까?

답변

1

내가 아는 한, 당신이 제안하는 것을 할 수있는 방법이 없습니다. 속성은 런타임에 변경할 수없는 정적 메타 데이터입니다. 당신이 컨트롤러의 모든 행동에 대한이 동작을 원한다면

[Authorize] 
public class AdminController : Controller { 

    public ActionResult ActionRequiringRoleFoo() { 
    if(!User.IsInRole("foo")) return RedirectToAction("InsufficientPrivileges"); 
    return View(); 
    } 

당신이 할 수있는, : 사용자가 적절한 역할이없는 경우에는 덜 편리하더라도, 당신은 리디렉션하여 당신이 원하는 것을 달성 할 수

protected override void OnActionExecuting(ActionExecutingContext filterContext) { 
    base.OnActionExecuting(filterContext); 
    if(filterContext.ActionDescriptor.ActionName != "InsufficientPrivileges" && 
    !User.IsInRole("anon")) filterContext.Result = new RedirectResult("InsufficientPrivileges"); 
} 

나는 희망한다.

+0

filterContext.ActionDescriptor.ActionName! = "InsufficientPrivileges"? 그렇지 않으면 리디렉션 루프. 무슨 역할입니까? 익명? – Mzn

+1

'! ='를 잘 잡습니다. 수정되었습니다. 예, 'anon'은'익명 '입니다. 왜 내가 그것을 포함했는지 기억이 안납니다 (저는 3 년 전에 이것을 대답했습니다!). –