如何在ASP.NET MVC中手动设置用户角色?

Col*_*ell 16 asp.net asp.net-mvc roles membership-provider

我正在研究的这个项目要求我保留一个管理员用户的本地数据库,并为常规用户使用外部数据库.任何在admin db中通过身份验证的人都应该被分配"admin"角色,而通过另一个db验证的任何人都将被分配一个"用户"角色.

我可以手动分配这些角色吗?我不需要角色提供程序的复杂性或任何东西,因为我只使用这两个角色,这些角色总是基于它们通过哪个db进行身份验证.

如果您可以提供示例代码或指向某些文档的链接,那将是一个巨大的帮助.谢谢!

编辑:

目前我没有使用角色提供者,创建一个似乎很麻烦.我知道它不是'最佳实践',但我只需要在登录期间分配2个角色中的1个(这永远不会改变).将角色信息存储在数据库中也没有意义,因为用户已经按角色分为2个dbs.

这是一些伪代码:

if (AdminDB.ValidateUser(username,password)==true) {
     SetAuthCookie(username);
     AssociateUserWithRole(username, 'admin');
} elseif (UserDB.ValidateUser(username,password)==true) {
     SetAuthCookie(username);
     AssociateUserWithRole(username, 'user');
} else {
     // Login failed.
}
Run Code Online (Sandbox Code Playgroud)

它的'ThisSession.AssociateUserWithRole'部分我不知道.基本上,用户通过身份验证,我需要告诉.NET用户属于哪个角色.

tva*_*son 15

实现角色提供程序并不是特别困难 - 特别是如果您只实现角色检查,而不是角色管理.只需实现您需要的那些部分,并让其余部分抛出NotImplementedExceptions.如果您只有一个应用程序,您也不必过于关注该部分.请注意,您需要的部分将取决于框架如何使用它,而不是您将如何使用它.我认为,例如,即使您只想检查它们是否处于特定角色,您仍需要实现返回所有用户角色的位.

也就是说,你可以省略整个RoleProvider并在Session中完成整个过程.在这种情况下,您将实现自己的AuthorizeAttribute并用自己的身份替换它的身份验证和角色检查位.一旦经过身份验证,就将用户的角色存储在会话中,并使用您的属性和为您使用它设置的方法/类的属性提供的参数在那里进行检查.


Kev*_*che 6

如果您正在使用asp.net内置的成员资格和角色,那么请查看AddUserToRole和RemoveUserFromRole:

http://msdn.microsoft.com/en-us/library/system.web.security.roles.addusertorole.aspx

根据他们登录的方式,您可以根据需要添加和删除它们.

如果您没有使用角色提供程序,或者您说您不想创建自己的角色提供程序,我无法从您的帖子中看出来.如果您没有使用内置角色提供程序,那么您将必须使用您所拥有的任何编码机制来根据用户登录的方式/位置在登录时切换用户.

编辑:现在您已经显示了您的代码,并声明您没有使用asp.net角色引擎.

您正在使用它出现的表单auth cookie,因此覆盖global.asax文件的authenticateRequest并根据需要设置角色并创建您的票证.

以下是一个示例:http: //csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html

该示例仅"获取"角色,但您可以在此处添加/更改角色.