自定义角色管理器/提供者

时间:2016-04-08 12:41:12

标签: c# asp.net-mvc-5 web-config forms-authentication roleprovider

我正在尝试使用以下Custom Role Provider Tutorial在MVC5应用程序中实现自定义角色管理器。

我创建了自定义角色提供程序,覆盖了2个必需的函数。

namespace Models.Security
{
public class CustomRoleProvider : RoleProvider
{
/// logic
 public override string[] GetRolesForUser(string username)
    {
/// logic
public override bool IsUserInRole(string username, string roleName)
    {

然后我需要更改我的网络配置以使用这个新的提供程序...

<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
 <roleManager enabled="true" defaultProvider="CustomRoleProvider">
  <providers>
    <clear />
    <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/>
  </providers>
</roleManager>

但是,当我尝试访问我的应用程序时,出现以下错误:

分析器错误消息:无法加载类型'Models.Security.CustomRoleProvider'。

Source Error:

Line 29:       <providers>
Line 30:         <clear />
Line 31:         <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/>
Line 32:       </providers>
Line 33:     </roleManager>

据我所知,我已经完成了所需的一切。唯一不同的是我使用链接到AD的自定义成员资格

<authentication mode="Forms">
  <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="200" slidingExpiration="false" protection="All" />
</authentication>
<membership defaultProvider="ADMembershipProvider">
  <providers>
    <clear />
    <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" />
  </providers>
</membership>

我还需要做些什么吗? MVC5改变了方法吗?

2 个答案:

答案 0 :(得分:0)

是。 MVC 5使用Identity,角色提供程序是ASP.NET Membership概念。您不需要Identity中的角色提供程序,因为控制角色。它是项目中的一个实体(或者至少可以是你的子类IdentityRole),所以你可以做任何你想做的事。

答案 1 :(得分:0)

您仍然可以使用roleManager和自定义角色提供程序。只需将您的主体设置为RolePrincipal类型即可。您可以在IAuthenticationFilter上执行此操作并在global.asax上注册它。请参阅以下两个链接以获取示例代码: RolePrincipal / IAuthenticationFilter