我对MVC很陌生(因为这是我的第一个项目,对于任何误导或糟糕的解释,我深表歉意),而且我不完全了解如何创建用户角色。我知道这里有很多这样的问题,但没有一个能够帮助我理解角色管理器。
我正在使用ASP NET身份来使我的用户,编辑他们,整个交易。我的数据库中有所有 Identity 生成的表及其所有关系。现在,我可以创建用户,但我对如何获取这些用户角色没有真正的想法。
我认为角色只是帐户模型/控制器的一部分,例如登录和注册,我只需要更改几行代码即可使其使用我自己的数据库在我的项目中工作。但我几乎找不到任何提及角色的代码文件。我通过谷歌看到的任何东西都刚刚飞过我的头(也就是说,因为代码优先和播种东西对我来说有点多,作为一个公认的新手和一个添加数据库并使用 Visual Studio 中的代码优先生成器的人)
帐户或标识文件控制器/模型中是否有我需要更改或写入的内容,或者这是否类似于为我自己的表创建 CRUD 操作,其中我基于我的模型创建控制器并从那里添加角色?
我正在使用带有MVC 4.5的身份2.0。提前感谢您的帮助!
----编辑------
我做了更多的谷歌搜索,我认为当我制作我的项目时,我没有获得RoleController或ApplicationRoleManager等背后的代码。这是正常的还是我设置错了什么?
我设法解决了我的问题,并尝试将 c# 转换为 vb,我们开始了!
我最终将我的角色播种到我的数据库中。在启动.vb---在根目录而不是视图目录中---编写以下内容:
Imports Owin
Imports Microsoft.Owin
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
<Assembly: OwinStartupAttribute(GetType(Startup))>
Partial Public Class Startup
Public Sub Configuration(app As IAppBuilder)
ConfigureAuth(app)
createRoles()
End Sub
Private Sub createRoles()
Dim UserManager As New UserManager(Of ApplicationUser)(New UserStore(Of ApplicationUser)(New ApplicationDbContext))
Dim RoleManager As New RoleManager(Of IdentityRole)(New RoleStore(Of IdentityRole)(New ApplicationDbContext))
Dim role = New IdentityRole()
If Not RoleManager.RoleExists("Administration") Then
role.Name = "Administration"
RoleManager.Create(role)
UserManager.AddToRole("user id", "Administration")
End If
If Not RoleManager.RoleExists("User") Then
role.Name = "User"
RoleManager.Create(role)
UserManager.AddToRole("user Id", "User")
End If
End Sub
End Class
我在 Startup 类中添加了一个新的子过程来创建我的角色(管理和用户)。此外,需要将 Identity 和 Identity.EntityFramework 的两个导入添加到文件中才能正常工作。
在 createRoles Sub 中,我们需要定义一个新的 UserManager(将角色添加到用户)和 RoleManager(将角色添加到数据库)。在两个管理器中,"ApplicationDbContext"将被替换为您的DbContext(位于模型文件夹的IdentityModel中),之后我们需要添加新的IdentityRole对象,以便我们可以添加一个角色。
接下来,我们检查某个角色是否存在"管理",它不存在,因此我们为角色对象添加一个名称并使用角色管理器来创建它。由于我的数据库中已经有用户,因此可以使用UserManager为用户添加角色。我从数据库中获取了我的用户 ID,并将其写入角色名称。
我为我想添加"用户"的另一个角色再次执行此操作。构建项目和沃利亚!您可以使用角色,现在您可以将这些角色应用于页面控制器,以使页面仅由"管理"或"用户"访问。
我在运行函数后注释掉了对该函数的调用,因此它不会每次构建都调用它,但由于这些角色存在,因此它不会再添加
您可以将这些角色应用于控制器中的页面,如下所示:
<Authorize(Roles:="Administration")>
Public Function yourPage() as ActionResult
Return View()
End Function
<Authorize(Roles:="Administration, User")>
Public Function yourPage2() as ActionResult
Return View()
End Function
我希望这可以帮助其他人!