如何检查用户是否属于任何角色?

时间:2014-06-12 10:41:11

标签: razor webmatrix

我正在与Websecurity和角色合作,并且我正试图解决我遇到的问题。

当您创建新帐户时,您不会将任何角色放在Websecurity中,我想要处理这个问题,因此不属于任何角色的人无法登录该页面。 我使用if(!WebSecurity.IsAuthenticated)检查帐户是否存在以及您是否正确登录但我还希望该页面检查用户是否属于任何角色,例如,如果他们是下一步是检查它们是否与该页面的角色分开。

我已经搜索了这种认证userole的方法但没找到任何方法。并希望有人知道这样做的好方法吗?

2 个答案:

答案 0 :(得分:1)

Asp.Net网站上的Adding Security and Membership to an ASP.NET Web Pages (Razor) Site教程提出了这种测试用户是否拥有管理员角色的方法:

@if ( Roles.IsUserInRole("admin")) {
    <span> Welcome <b>@WebSecurity.CurrentUserName</b>! </span>
}
else {
    Response.Redirect("~/AdminError");
}

<强>被修改

如果您想测试当前用户是否没有任何角色,您可以尝试以下方式:

@if (Roles.GetRolesForUser(WebSecurity.CurrentUserName).Length == 0){
    // user has no role
} else {
    // user has at least one role
}

答案 1 :(得分:1)

如果您正在尝试实现网站的安全性,那么您可以阅读ASP.NET网页官方网站上提供的教程,他们手中有一套写得很好的教程。

其次,您要分享的代码

if(!WebSecurity.IsAuthenticated)

只检查用户的LoggedIn属性,它不会检查用户是否有帐户,角色等。当用户使用<登录时,它将检查服务器设置的cookie或缓存/ p>

WebSecurity.Login(username, password);

这样,您只能检查用户是否已登录。如果用于显示

  

登录|注册 user_name |退出

网站上的横幅。

如果要添加新的安全层以检查用户的角色。使用此

if (Roles.IsUserInRole("roleString")) {
    // user is in the role
} else {
    // user was in no role
}

您可以在IsAuthenticated方法检查中附加此方法以创建2层安全性。

检查这个的示例系统将是

if(WebSecurity.IsAuthenticated) {
   // User is logged in!
   if(Roles.IsUserInRole("someString")) {
      // user is in role
      // check other condition here...I was not able to understand
      // the page condition...Sorry! 
   }
}

编辑(检查新创建的用户)

在角色中添加用户时。 ASP.NET实际上为该用户创建了一个新行,其中包含了他所在的角色。

这就像是

UserId | RoleId
10     | 1

假设新创建的userId为10管理员的RoleId为1.您可以使用此

查询
var isInRoles = db.Query("SELECT * FROM webpages_UsersInRoles WHERE UserId =@0", 
                WebSecurity.CurrentUserId).Count();
if(isInRoles == 0) {
   // No record found! So user must be a New User!
   // Show X here...:)
}

这是检查角色中的用户的示例。或者检查用户是新用户还是以前用户等。