【发布时间】:2014-11-28 04:30:57
【问题描述】:
我正在开发一个带有自定义角色提供者的 MVC 5 应用程序,但似乎 AuthorizeAttribute 从未调用我的客户角色提供者,我的代码如下:
我的客户提供商:
namespace MyDomain
{
public class CustomRoleProvider : RoleProvider
{
public override string[] GetRolesForUser(string username)
{
using (MyContext objContext = new MyContext())
{
var objUser = objContext.Users.FirstOrDefault(x => x.Username == username);
if (objUser == null)
{
return null;
}
else
{
string[] ret = { objUser.Access_Levels.Name };
return ret;
}
}
}
public override bool IsUserInRole(string username, string roleName)
{
var userRoles = GetRolesForUser(username);
return userRoles.Contains(roleName);
}
}
我的控制器:
[Authorize(Roles = "Administrator")]
public class AdminController : Controller
和 Web.Config:
<system.web>
<roleManager defaultProvider="CustomRoleProvider" enabled="true" >
<providers>
<clear />
<add name="CustomRoleProvider" type="Online_Storage_Portal.CustomRoleProvider" cacheTimeoutInMinutes="30"/>
</providers>
</roleManager>
</system.web>
此外,我的自定义角色提供程序与我的其他控制器在同一个项目中,我可以在我的控制器中使用以下代码调用我的自定义角色提供程序方法
String[] 角色 = Roles.GetRolesForUser(用户名)
但具有 [Authorize(Roles = "Administrator")] 的控制器总是将页面重定向到登录屏幕,即使用户登录名和角色都受到重视。
请帮忙!!
【问题讨论】:
标签: model-view-controller provider role authorize-attribute