【问题标题】:Howto check if user is part of any roles?如何检查用户是否属于任何角色?
【发布时间】:2014-06-12 10:41:10
【问题描述】:

我正在处理网络安全和角色,我正在尝试解决我遇到的问题。

当您创建一个新帐户时,您不会在 Websecurity 中分配任何角色,我想解决这个问题,这样不属于任何角色的人就无法登录该页面。 我正在使用if(!WebSecurity.IsAuthenticated) 检查帐户是否存在以及您是否正确登录,但我还希望该页面检查用户是否是任何角色的一部分,例如,如果他们是下一步是检查他们是否是除了该页面的正确角色。

我已经搜索过这种验证用户身份的方式,但没有找到。并希望有人知道这样做的好方法?

【问题讨论】:

  • 控制器/动作上的标准 [Authorize(Roles = "Admin,SubAdmin")] 类型装饰有什么问题吗?
  • 问题是,如果您创建一个新登录名,默认情况下它不会设置角色,所以我想要的是,如果您不是角色的一部分,将显示 X。我还没有找到任何解决方案。
  • 为什么不添加一个初始角色,即。创建帐户时的“guest”?

标签: razor webmatrix


【解决方案1】:

如果你想实现网站的安全性,那么你可以阅读 ASP.NET Web Pages 官网提供的教程,他们手里有一套写得很好的教程。

其次,你分享的那段代码

if(!WebSecurity.IsAuthenticated)

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

WebSecurity.Login(username, password);

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

登录 |注册用户名|退出

网站上的横幅。

如果您想添加一个新的安全层来检查用户的角色。使用这个

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! 
   }
}

EDIT(检查新创建的用户)

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

应该是这样的

UserId | RoleId
10     | 1

假设新创建的 userId 是 10Admin 的 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...:)
}

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

【讨论】:

  • 是的,我已经读过了,但这表明您已经成为某个角色的一部分。但我的问题是,如果您根本不属于任何角色(创建新帐户),那么将显示 X。
  • @Tman,我在答案中添加了更多细节! :) 你现在可以检查一下,我希望它足以让你理解......
【解决方案2】:

来自 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
}

【讨论】:

  • 是的,我以前读过这篇文章,但如果你根本不属于任何角色,我正在寻找解决方案。
猜你喜欢
  • 2011-01-20
  • 2021-01-02
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2021-10-25
  • 2021-02-24
相关资源
最近更新 更多