首页 文章

允许用户同时为“用户”和“管理员”角色

提问于
浏览
0

我遇到了问题,想知道是否有人有建议 . 在我正在开发的网站上,我使用的是Asp.net Simple Membership,但现在我正在迁移到Asp.net Identity 2.我有两个角色:“User”和“Admin” . 管理员可以进行管理stuf,配置,数据库管理等 . 但不能做“用户事” . 因此,管理员不是“超级用户” - 它只有不同的功能 .

我面临的问题是用户的唯一标识符是他们的电子邮件 . 所以,如果有人想要自己使用系统,他必须创建2个帐户(一个管理员和一个用户),所以他必须有2封电子邮件 . 这是个问题 . 我可以轻松地向用户添加“用户”和“管理员”角色,但这会使系统更难用于“用户”角色,我想避免这种情况 .

我使用角色来授权服务器上的路由(MVC和web api)以及UI(SPA)上的基本(如隐藏元素),因此,它已经是系统的一部分 - 但我愿意改变它,如果必要 .

我在考虑做这样的事情:

当用户配置为管理员时,每次他登录时,我都会询问他是否想成为此会话的管理员或用户 .
如果他选择"user",我为他设置了一个用户角色并登录 .
如果他选择"admin",我会为他设置一个"admin"角色并登录 .

你觉得怎么样?有人有更好的主意吗?这感觉就像一个黑客和黑客在安全性方面做得不好:/

我发现了一个问题 - 有时我需要向管理员发送电子邮件(当他们离线时) . 有了这个,我不能只依赖UserRole表,总是要检查User.IsAdministrator标志 . 这不是一个大问题,但为事物增加了一点点复杂性 .

2 回答

  • 0

    您需要为此使用角色 . 用户可以同时是多个角色的成员,因此您可以拥有一个“用户”角色成员的用户,一个“admin”角色成员的用户或一个成员的用户'用户'和'管理员'角色 .

    你已经提出了这个想法,这就是我要做的,如果你想控制他们可以看到的东西(这样'管理'成员只能看到通常'用户'角色用户可以看到的东西)然后你可以在任何表单上下拉(或将其放在您的母版页上),允许用户打开和关闭管理员内容,然后您可以记住他们在会话对象中的选择并在每次页面加载时引用它 . 例如

    if user.IsInRole("Admin") and IsNothing(Session("HideAdmin")) Then
           'Show Admin Stuff
      End If
    

    或者类似的东西 .

  • 0

    这种类型的问题在DataBase Design时解决,而不是在开发时 . 你没有多少选择,我看到的最好的是创建一个拥有这两种权利的第三个用户 .

相关问题