如果您想使用部分 asp.net 成员资格/身份验证/授权服务,您需要实现自定义角色提供程序来执行角色成员资格检查。
要做的第一件事是创建一个继承自System.Web.Security.RoleProvider 的类,其中听起来您最初关心实现的方法是:
- FindUsersInRole
- GetRolesForUser
- GetUsersInRole
- IsUserInRole
所以,你最终会得到类似于:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
public class MyCustomRoleProvider : RoleProvider
{
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
}
public override string[] GetRolesForUser(string username)
{
}
public override string[] GetUsersInRole(string roleName)
{
}
public override bool IsUserInRole(string username, string roleName)
{
return GetUsersInRole(roleName).Contains(username);
}
}
注意:Visual Studio 将显示很多方法,例如 GetAllRoles 和 throws new NotImplementedException(),但我之前编写了一个“最低限度”角色提供程序,只需要实现我的方法已在上面列出。那是针对网络应用程序没有更新它们的“只读”角色。
然后您需要将roleManager 元素添加到web.config 文件中的system.web 下,如下所示:
<roleManager defaultProvider="NameOfYourRoleProvider" enabled="true">
<providers>
<clear />
<add name="NameOfYourRoleProvider" type="Namespace.To.Your.Class.And.Class.Name, Name.Of.Assembly.Containing.Your.RoleProvider" />
</providers>
</roleManager>
要记住的一点是,RoleProvider 实例是由底层 asp.net 基础架构创建的,因此您需要通过 HttpContext.Current.Session 访问会话数据(并检查 HttpContext.Current 是否存在) t null 在使用它之前),这将需要在您的提供程序的代码中使用using System.Web;。