【问题标题】:Allow an user to be both "User" and "Admin" roles允许用户同时是“用户”和“管理员”角色
【发布时间】:2014-07-06 12:47:51
【问题描述】:

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

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

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

我正在考虑做这样的事情:

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

你怎么看?有人有更好的主意吗?这感觉像是一种黑客行为,而且黑客行为不适合安全性:/

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

【问题讨论】:

    标签: asp.net security authorization roles


    【解决方案1】:

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

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

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

    或类似的东西。

    【讨论】:

      【解决方案2】:

      这类问题在数据库设计时解决,而不是在开发时解决。您别无选择,我认为最好的选择是创建一个拥有这两项权利的第三个用户。

      【讨论】:

        猜你喜欢
        • 2012-10-09
        • 2017-02-15
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        相关资源
        最近更新 更多