【发布时间】:2015-06-16 15:37:41
【问题描述】:
我的自定义角色提供者“string[] GetRolesForUser(string username)”方法有问题,但过程没有通过它。我的代码是:
控制器(只是其中的一部分):
[Authorize(Roles="Administrator")]
public class UsersController : AdminBaseController
{
private IUsersRepository users;
private IDepartmentsRepository departments;
public UsersController()
{
this.users = new UsersRepository(new TicketsContext());
this.departments = new DepartmentsRepository(new TicketsContext());
}
}
自定义角色提供者:
public class CustomRoleProvider : RoleProvider
{
public override bool IsUserInRole(string username, string roleName)
{
var userRoles = GetRolesForUser(username);
return userRoles.Contains(roleName);
}
public override string[] GetRolesForUser(string username)
{
//Return if the user is not authenticated
if (!HttpContext.Current.User.Identity.IsAuthenticated)
return null;
//Return if present in Cache
var cacheKey = string.Format("UserRoles_{0}", username);
if (HttpRuntime.Cache[cacheKey] != null)
return (string[])HttpRuntime.Cache[cacheKey];
//Get the roles from DB
var userRoles = new string[] { };
var user = db.Users.Where(u => u.email == username).FirstOrDefault();
if (user != null)
{
if(user.access_level == 0)
{
userRoles = new[] { "Administrator" };
}
else
{
userRoles = new[] { "Normal" };
}
}
//Store in cache
HttpRuntime.Cache.Insert(cacheKey, userRoles, null, DateTime.Now.AddMinutes(_cacheTimeoutInMinutes), Cache.NoSlidingExpiration);
// Return
return userRoles.ToArray();
}
}
Web.config
<!-- Custom Role Provider -->
<roleManager enabled="true" defaultProvider="TicketsRoleProvider">
<providers>
<add name="TicketsRoleProvider"
type="Tickets.CustomRoleProvider"
cacheTimeoutInMinutes="30" />
</providers>
</roleManager>
我无法让它工作,我不知道为什么。
谁能帮帮我?
谢谢
【问题讨论】:
-
那是因为它使用了角色提供者的 IsUserInRole 方法。进入那个方法。
-
如果我在那个方法(“IsUserInRole”)中放了一个断点仍然一样,不要通过它。我在问题中添加了方法,请看一下。
-
对这个问题的评论有点晚了,但在你的例子中,没有办法设置 cacheTimeoutInMinutes > 所以我想知道它是否是默认值 (0)
标签: asp.net asp.net-mvc-5 roleprovider asp.net-mvc-5.2