asp.net-mvc - 如何让 RoleProvider 工作?

标签 asp.net-mvc asp.net-membership membership-provider custom-membershipprovider

这是一个 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/

相关文章:

c# - 具有分布式 session 的 ASP.Net Core Identity

用于管理成员资格、角色和个人资料的 ASP.NET MVC 项目

asp.net-mvc - ASP.NET 成员(member) : Custom Profile Inheritance

c# - MVC 5 IIS;在 web.config 之前使用 machine.config

当用户登录时,ASP.NET 成员(member)登录重定向到未经授权的

asp.net - System.Web.Providers.DefaultMembershipProvider 有性能问题/死锁

asp.net-mvc - 确定是否应使用 .NET MVC

c# - asp.net mvc 客户端验证不起作用?

asp.net-mvc - MVC 中下拉列表的验证

c# - 登录错误 : codes specific to reason why there was an error