我正在开展的这个项目要求我保留一个本地数据库的管理员用户,并为常规用户使用一个外部数据库.在admin db中通过认证的任何人都应该被分配为“admin”角色,任何通过其他数据库认证的人员将始终被分配一个“用户”角色.
我可以手动分配这些角色吗?我不需要角色提供者或任何东西的复杂性,因为我只使用这两个角色,这些角色将始终基于他们认证的数据库.
如果您可以提供示例代码或某些文档的链接,这将是一个巨大的帮助.谢谢!
编辑:
目前我没有使用角色提供者,并且创建一个似乎是一个麻烦.我知道它不是“最佳实践”,但我只需要在登录过程中分配2个角色中的1个(这绝对不会改变).将角色信息存储在数据库中也是没有意义的,因为用户已经通过角色将它们分成了2个dbs.
这里有一些伪代码:
if (AdminDB.ValidateUser(username,password)==true) { SetAuthCookie(username); AssociateUserWithRole(username,'admin'); } elseif (UserDB.ValidateUser(username,'user'); } else { // Login Failed. }
它的’ThisSession.AssociateUserWithRole’部分我不知道.基本上,一个用户被认证,我需要告诉.NET用户所属的角色.
解决方法
Implementing a role provider并不是特别困难 – 特别是如果你只是执行角色检查,而不是角色管理.只需要实现你需要的那些部分,剩下的就是NotImplementedExceptions.如果您只有一个应用程序,您也不必太关心该部分.请注意,您需要的部分将由框架如何使用它决定,而不是如何使用它.我认为,例如,您将需要实现返回所有用户角色的位,即使您只想检查它们是否处于特定角色.
也就是说,您可以省略整个RoleProvider并在会话中做整个事情.在这种情况下,您将实现自己的AuthorizeAttribute,并将其替换为您自己的身份验证和角色检查位.验证后将用户的角色存储在会话中,并使用您的属性和提供给您装饰它的方法/类的属性的参数进行检查.