这是一个 MVC 3 项目。只是为了测试,我有
public class MyRoleProvider : RoleProvider
{
public override string[] GetRolesForUser(string username)
{
return new string[] { "0", "1", "2", "4" };
}
public override bool IsUserInRole(string username, string roleName)
{
bool result = true;
return result;
}
我在 web.config 中注册它。然后,如果我配置标准的 SqlMemberShipProvider,类似以下内容将导致我的 GetRolesForUser 触发。
[Authorize(Roles="4")]
public class AdminController : Controller
{ //...
但是,我不想使用标准的 SqlMemberShipProvider。我通过自己的 AuthorizeAttribute 定义如下,只是为了测试:
public class MyAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool result = true;
return result;
return base.AuthorizeCore(httpContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
}
现在,以下内容将不再导致 MyRoleProvider.GetRolesForUser 触发。
[MyAuthorize(Roles="4")]
public class AdminController : Controller
{ //...
以上将触发 MyAuthorize.AuthorizeCore 和 MyAuthorize.OnAuthorization 但不会触发 MyRoleProvider 中的方法。MemberShipProvider、RoleProvider 和 AuthorizedAttribute 是什么关系?何时定义或配置这些关系?
谢谢。