这是一个 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 之间有什么关系?这些关系何时定义或配置?
谢谢。
最佳答案
如果您不想使用标准 SqlRoleProvider,请不要配置它。我通常将其注释掉或删除。
您的配置将如下所示:
<roleManager defaultProvider="MyRoleProvider" enabled="true">
<providers>
<clear />
<!--<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />-->
<add name="MyRoleProvider" type="Full.Namespace.Of.MyRoleProvider" applicationName="/" />
</providers>
</roleManager>
关于asp.net-mvc - 如何让 RoleProvider 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926663/