我想在Index controller
中运行以下代码public ActionResult Index()
{
if(User!=null)
{
if(0==(Roles.GetRolesForUser(username).ToList().Contains("administrator")))
{
//do something
}
}
return View();
}
当我加载索引页面时,GetRolesForUser
出现异常,尤其是当User
不为空(用户在线/登录)时
该异常要求我在_appStart.cshtml文件中调用WebSecurity's InitializeRoles
答案 0 :(得分:1)
Controller.User
属性永远不会为null。当用户未登录时,User
仍将引用IPrincipal
实例。但是,User.Identity.Name
将等于空字符串。此外,User.IsAuthenticated
将等于false
。
试试这个:
public ActionResult Index()
{
if (User.IsInRole("administrator"))
{
// do something
}
return View();
}
答案 1 :(得分:0)
如果您还没有,则必须在web.config中启用rolemanager。
请参阅此帖子:https://stackoverflow.com/a/12980969/1502563
以下链接答案的摘录:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider"
type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
</providers>
</membership>
哦,当然 - 你也需要创建角色管理员。
从头开始,请参阅以下链接: