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

Razor 如何检查用户是否属于任何角色?,razor,webmatrix,Razor,Webmatrix,我正在处理网络安全和角色问题,我正在努力解决我遇到的一个问题 当您创建一个新帐户时,您不会在Websecurity中获得任何角色的登录,我想处理这个问题,这样不属于任何角色的人就不能登录到该页面。 我正在使用if(!WebSecurity.IsAuthenticated)检查帐户是否存在,以及您是否正确登录,但我也希望该页面检查用户是否属于任何角色,例如,他们是否属于下一步是检查他们是否属于该页面的正确角色 我已经搜索了这种验证userole的方法,但没有找到任何方法。希望有人知道这样做的好方法

我正在处理网络安全和角色问题,我正在努力解决我遇到的一个问题

当您创建一个新帐户时,您不会在Websecurity中获得任何角色的登录,我想处理这个问题,这样不属于任何角色的人就不能登录到该页面。 我正在使用
if(!WebSecurity.IsAuthenticated)
检查帐户是否存在,以及您是否正确登录,但我也希望该页面检查用户是否属于任何角色,例如,他们是否属于下一步是检查他们是否属于该页面的正确角色

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

来自Asp.Net网站的教程提出了这种方法来测试用户是否拥有管理员角色:

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

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

其次,您正在共享的代码片段

if(!WebSecurity.IsAuthenticated)
只检查用户的LoggedIn属性,不检查用户是否有帐户、角色等。它将检查用户使用登录时服务器设置的cookie或缓存

WebSecurity.Login(username, password);
这样,您只能检查用户是否登录。如果用于显示

登录|注册用户名|注销

网站上的横幅

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

if (Roles.IsUserInRole("roleString")) {
    // user is in the role
} else {
    // user was in no role
}
您可以将此方法附加到
IsAuthenticated
方法检查中,以创建两层安全性

检查这一点的示例系统是

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
,而Admin的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...:)
}

这是一个检查角色中的用户的示例。或者检查用户是新用户还是以前的用户,依此类推

标准的
[Authorize(Roles=“Admin,SubAdmin”)]
在控制器/操作上键入装饰有什么问题吗?问题是,如果您创建一个新登录,默认情况下它不会设置角色,因此我想要的是,如果您不是角色X的一部分,则会显示。我还没有找到任何解决方案。为什么不在创建帐户时添加一个初始角色,即“来宾”?是的,我以前读过这个,但如果你根本不是任何角色的一部分,我正在寻找解决方案。是的,我读过这个,但它表明你已经准备好成为角色的一部分。但我的问题是,如果你根本不是任何角色的一部分(新创建的帐户),那么将显示X。@Tman,我在答案中添加了更多详细信息!:)你现在可以查一下,我希望这足以让你明白。。。
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...:)
}