我遇到了问题,想知道是否有人有建议。在我正在开发的网站上,我使用的是Asp.net Simple Membership,但现在我正在迁移到Asp.net Identity 2.我有两个角色:“User”和“Admin”。管理员可以进行管理stuf,配置,数据库管理等。但不能做“用户事”。因此,管理员不是“超级用户” - 它只有不同的功能。
我面临的问题是用户的唯一标识符是他们的电子邮件。所以,如果有人想要自己使用系统,他必须创建2个帐户(一个管理员和一个用户),所以他必须有2封电子邮件。这是个问题。我可以轻松地向用户添加“用户”和“管理员”角色,但这会使系统更难用于“用户”角色,我想避免这种情况。
我使用角色来授权服务器上的路由(MVC和web api)以及UI(SPA)上的基本(如隐藏元素),因此,它已经是系统的一部分 - 但我愿意改变如果有必要的话。
我在考虑做这样的事情:
当用户配置为管理员时,每次登录时,我都会询问他是否想成为此会话的管理员或用户。
如果他选择“用户”,我会为他设置一个用户角色并登录。
如果他选择“admin”,我会为他设置“admin”角色并登录。
你怎么看?有人有更好的主意吗?这感觉就像一个黑客和黑客在安全方面做得不好:/
我发现问题 - 有时我需要向管理员发送电子邮件(当他们离线时)。有了这个,我不能只依赖UserRole表,总是要检查User.IsAdministrator标志。这不是一个大问题,但会给事物增加一点点复杂性。
答案 0 :(得分:0)
您需要为此使用角色。用户可以同时成为多个角色的成员,因此您可以让用户成为“用户”的成员。角色,是' admin'成员的用户。作为'用户'的成员的角色或用户和' admin'角色。
你已经提出了这个想法,如果你想控制他们可以看到的东西,那就是我会这样做的方式(这样一来,' admin'成员只能看到通常为&#的东西39;用户'角色用户可以看到)然后你可以在任何表格上下拉(或把它放在你的母版页上),允许用户打开和关闭管理员的东西,然后你可以记住他们的选择会话对象,并在每次加载页面时引用它。 e.g。
if user.IsInRole("Admin") and IsNothing(Session("HideAdmin")) Then
'Show Admin Stuff
End If
或类似的东西。
答案 1 :(得分:0)
此类问题在DataBase Design时解决,而不是在开发时。你没有多少选择我看到的最好的是创建一个拥有这两种权利的第三个用户。