0

我在 MVC3 应用程序中为用户和角色使用自定义成员资格。我有自定义用户/角色类。我为此扩展了 RoleProvider 和 MembershipProvider 类。

我似乎在我的应用程序中有时会丢失角色,并且我的 Authorize [Roles='xyz'] 属性无法正常工作并尝试重定向到 Account/LogOn。当我的用户登录应用程序时,我所做的就是

if (ModelState.IsValid)
            {
                if (MyCustomSecurity.Login(model.UserName, model.Password, model.RememberMe))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
--other stuff
}

MyCustomSecurity.Login 方法基本上是在数据库中查找用户,如果有效则返回一个真值。

在尝试使用我的应用程序调试问题时,我遇到了以下链接

http://www.codeproject.com/Articles/578374/AplusBeginner-27splusTutorialplusonplusCustomplusF ASP.NET MVC 表单认证+授权属性+简单角色

我是否也应该覆盖此链接中提到的 FormsAuthentication_OnAuthenticate() ?还是 RoleProvider 扩展类负责这个?
谢谢你

4

1 回答 1

0

如果在 AuthorizeAttribute 中使用角色,而角色是自己的类,那么需要重写 RoleProvider,尤其是 GetRolesForUser 方法:

public class CustomRoleProvider : RoleProvider
{
    public override string[] GetRolesForUser(string username)
    {
    // put your logic to discover which roles the user has
    }
}

之后,您必须在 Web.Config 中注册您的 CustomRoleProvider:

<roleManager enabled="true" defaultProvider="CustomRoleProvider">
    <providers>
        <clear/>
        <add name="CustomRoleProvider" type="%YOURNAMESPACE%.CustomRoleProvider" />
    </providers>
</roleManager>
于 2013-11-01T11:24:18.247 回答