2017-04-26 101 views
0

我目前正在开发一个应用程序ASP.NET MVC 4,但我也在学习。角色asp.net设置

我想使用角色进行身份验证,但是我一直在做错误的事情。

问题是我不需要更多的角色,我只是想要默认的角色。

<system.web> 

<authentication mode="None" /> 
<compilation debug="true" targetFramework="4.5" /> 
<httpRuntime targetFramework="4.5" /> 
<roleManager enabled="true" /> 

在控制器

[Authorize(Roles = "Administrator")] 
public class AccountController : Controller 
{} 

而且在登录后的方法我想将用户添加到该角色。

if (!Roles.IsUserInRole(saveAccount.Username, "Administrators")) 
    Roles.AddUserToRole(saveAccount.Username, "Administrators"); 

但每次我登录,并尝试重定向到另一个页面我得到这个

HTTP Error 401.0 - Unauthorized You do not have permission to view this directory or page. 

可有人指导我,好吗?

+0

您可以确认用户是否分配给数据库中的管理员角色? – Kostis

+0

我没有角色的数据库,它是必须的吗?因为我只是想限制注册用户。关键是我只有一种类型的用户... –

+0

您必须以某种方式将用户分配给一个或多个角色,并且我很难知道如何在不保留角色及其分配的情况下如何做到这一点一个数据库。无论如何,错误是明确的。用户在指定的角色中不是*,因此是未经授权的(401)。 –

回答

0

角色是授权,认证是另一个过程。

如果你需要的只是限制对已知用户,则:

  • 创建用户登录视图/通
  • Implemente窗体上的web.config部门认证<system.web>
  • 拒绝匿名用户

<system.web> 
    <compilation debug="true" targetFramework="4.6.1" /> 
    <httpRuntime targetFramework="4.6.1" /> 
    <authentication mode="Forms"> 
      <forms all parameters needed to a connection's forms></forms> 
    </authentication> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 
</system.web> 
+0

非常感谢。这是我需要的。 –

0

将用户添加到角色时,必须使用UserId而不是用户名。

您还必须在Roles表中创建一个包含所需角色名称的记录。

使用RoleManager创建新角色。

 ApplicationDbContext context = new ApplicationDbContext(); 
     var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); 

     if (!roleManager.RoleExists("Admin")) 
     { 

      //Creating Admin role 
      var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole(); 
      role.Name = "Administrator"; 
      roleManager.Create(role); 
     } 

     if (!Roles.IsUserInRole(#yourUserId, "Administrator")) { 
      Roles.AddUserToRole(#yourUserId, "Administrator"); 
     } 

(数据库为用户和角色是DefaultConnection下在服务器资源管理器中的数据连接区)。

+0

用程序中的UserId替换'#yourUserId'。 –