当我实现 RoleProvider 类并调用 Roles.IsUserInRole(string username, string roleName) 时,代码执行首先转到方法“GetRolesForUser(string username)”。为什么是这样?当我只是在寻找该用户是否属于一个角色的单一值时,我不想迭代所有角色。这是 .NET 角色提供程序类的限制,还是我可以做些什么来控制代码的执行?
这是调用代码
if (Roles.IsUserInRole(CurrentUser.UserName, "Teacher")) {
这是 IsUserInRole 的实现
public override bool IsUserInRole(string username, string roleName) { return true; }
但是代码 GetRolesForUser 总是首先实现:
public override string[] GetRolesForUser(string username) {
string[] roles = GetAllRoles();
List<string> userRoles = new List<string>();
foreach (string role in roles) {
if (IsUserInRole(username, role)) {
userRoles.Add(role);
}
}
return userRoles.ToArray();
}