I would like to run the following code in Index controller
我想在索引控制器中运行以下代码
public ActionResult Index()
{
if(User!=null)
{
if(0==(Roles.GetRolesForUser(username).ToList().Contains("administrator")))
{
//do something
}
}
return View();
}
I got an exception at GetRolesForUser
when the Index page loads especially when the User
is not null (the user is online/logged in)
当Index页面加载时,GetRolesForUser出现异常,特别是当User不为null(用户在线/登录)时
The exception asks me to call WebSecurity's InitializeRoles
in _appStart.cshtml file
该异常要求我在_appStart.cshtml文件中调用WebSecurity的InitializeRoles
2 个解决方案
#1
1
The Controller.User
property will never be null. When a user is not logged in, User
will still reference an IPrincipal
instance. However, User.Identity.Name
will be equal to an empty string. Also, User.IsAuthenticated
will equal false
.
Controller.User属性永远不会为null。当用户未登录时,用户仍将引用IPrincipal实例。但是,User.Identity.Name将等于空字符串。此外,User.IsAuthenticated将等于false。
Try this:
尝试这个:
public ActionResult Index()
{
if (User.IsInRole("administrator"))
{
// do something
}
return View();
}
#2
0
If you haven't already, you have to enable rolemanager in web.config.
如果您还没有,则必须在web.config中启用rolemanager。
See this post: https://*.com/a/12980969/1502563
看到这篇文章:https://*.com/a/12980969/1502563
Snippet from linked answer below:
来自以下链接答案的片段:
<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>
Oh and of course - you need to create the role administrator too.
哦,当然 - 你也需要创建角色管理员。
See these links on some ways to do it from scratch:
从头开始,可以通过以下方式查看这些链接:
http://odetocode.com/blogs/scott/archive/2012/09/05/seeding-membership-amp-roles-in-asp-net-mvc-4.aspx
http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/
#1
1
The Controller.User
property will never be null. When a user is not logged in, User
will still reference an IPrincipal
instance. However, User.Identity.Name
will be equal to an empty string. Also, User.IsAuthenticated
will equal false
.
Controller.User属性永远不会为null。当用户未登录时,用户仍将引用IPrincipal实例。但是,User.Identity.Name将等于空字符串。此外,User.IsAuthenticated将等于false。
Try this:
尝试这个:
public ActionResult Index()
{
if (User.IsInRole("administrator"))
{
// do something
}
return View();
}
#2
0
If you haven't already, you have to enable rolemanager in web.config.
如果您还没有,则必须在web.config中启用rolemanager。
See this post: https://*.com/a/12980969/1502563
看到这篇文章:https://*.com/a/12980969/1502563
Snippet from linked answer below:
来自以下链接答案的片段:
<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>
Oh and of course - you need to create the role administrator too.
哦,当然 - 你也需要创建角色管理员。
See these links on some ways to do it from scratch:
从头开始,可以通过以下方式查看这些链接:
http://odetocode.com/blogs/scott/archive/2012/09/05/seeding-membership-amp-roles-in-asp-net-mvc-4.aspx
http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/