【问题标题】:Access level / security roles design choice: individual roles or inheritance访问级别/安全角色设计选择:单个角色或继承
【发布时间】:2011-03-05 03:28:15
【问题描述】:

请考虑这种情况:一个具有 4 个访问级别的 Web 应用程序:管理员 > 经理 > 代表 > 客户 > 无角色(公共访问页面)

使用我当前的应用设置,我可以通过 2 种方式允许访问:

  1. 我可以编写代码,假定角色优先,即如果用户是经理 - 应用程序将自动假定他/她有权访问客户和代表可以访问的区域,但不能访问管理员。

  2. 我可以在表格中单独分配每个角色。例如,一个用户将有 3 个角色分配给他们。所以应用程序不会承担角色优先/继承。我可以让管理员为用户分配角色,或者修改一些代码,如果授予更高的访问级别,将自动为用户分配额外的角色。

从可维护性的角度来看,这两种方法中哪一种更好?

附言

我认为这并不重要,但我正在使用带有 CanCan 和 Devise 的 Rails 3。 我对角色和用户之间关系的设置如下:

角色 (HABTM) 用户

【问题讨论】:

    标签: ruby-on-rails security design-patterns cancan


    【解决方案1】:

    我有类似的角色要求,我选择了方法 1。很自然地假设您的角色层次越高,您拥有的访问权限就越多。因此,说经理可以访问代表拥有的资源是可以的。

    此外,由于您使用的是 CanCan,因此非常容易设置掉线。从初始化块顶部具有最少访问权限的角色开始,然后向下工作。

    【讨论】:

    • Srdjan,感谢您的回复。后续问题:如果角色名称发生变化或者我必须添加更精细的角色支持怎么办。我的意思是——不再有单一的垂直继承。 I.E.:我想授予一些代表,名为 product_manager 的新角色,并授予其他一些 faq_manager,但另一个代表应该能够获得 news_manager。你会如何处理这样的案件?过去 - 我使用了第二种方法,结果还可以。有什么想法吗?
    • 哦,如果您需要更精细的粒度并且角色不一定相互建立,我也会采用方法 2。cancan 的美妙之处在于,如果您需要,您可以做任何一个它到。
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多