Ruby on Rails 中的用户层次结构设计

发布于 2024-11-07 12:09:41 字数 514 浏览 3 评论 0原文

我有一个需要身份验证的应用程序,并且有一个用户模型。有 4 级授权,规则如下:

  1. 1 级用户可以创建/编辑/删除所有 2,3 和 4 级用户。
  2. 2 级用户可以创建 3 级和 4 级用户,并且只能编辑他们拥有的用户。
  3. 3级和4级无权创建/编辑/删除用户。
  4. 更新:3 级和 4 级用户可以有多个 2 级父用户。

除此之外,我希望所有用户都能够通过单个界面登录。

是否有处理这种层次结构的模式?使用诸如 cancan 之类的授权插件将允许我定义不同级别的授权,但不能定义授权之间的关系不同的用户。

本质上,我想要一种设计,使我能够编写如下所示的控制器代码:

@level_two_users = current_user.find_all_my_level_two_users

谢谢

I have an application that requires authentication, and have a User model. There are 4 levels of authorisation with the following rules:

  1. Level 1 users can create/edit/delete all level 2,3 and 4 users.
  2. Level 2 users can create level 3 and 4 users, and edit only those users they own.
  3. Levels 3 and 4 have no authorisation to create/edit/delete users.
  4. UPDATE: Level 3 and 4 users could have multiple level 2 parent users.

In addition to this, I want all users to be able to login through a single interface.

Are there any patterns for dealing with such a hierarchy? using an authorisation plugin such as cancan will allow me to define the different levels of authorisation, but not the relationships between the different users.

Essentially I would like a design that would enable me to write controller code such as this:

@level_two_users = current_user.find_all_my_level_two_users

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抽个烟儿 2024-11-14 12:09:41

您可以向用户模型添加属性 level 以及查询允许用户的方法。

要获取级别为 X 的所有用户,只需使用类似 User.find_all_by_level(2) 顺便说一句的查询

class User
  attr_accessible :level

  def allowed_to_edit_user?(user)
    case self[:level]
      when 1
        user.level > 1
      when 2
        user.level > 2 && user.created_by?(self)
    end
    false
  end

  def allowed_to_create_user_with_level?(level)
    self[:level] <= 2 && self[:level] < level 
  end
end

。谁创建 1 级用户? ;-)

You could add a attribute level to your user model and a method to query for allowed users.

To get all users with level X just use a query like User.find_all_by_level(2)

class User
  attr_accessible :level

  def allowed_to_edit_user?(user)
    case self[:level]
      when 1
        user.level > 1
      when 2
        user.level > 2 && user.created_by?(self)
    end
    false
  end

  def allowed_to_create_user_with_level?(level)
    self[:level] <= 2 && self[:level] < level 
  end
end

Btw. who creates level 1 users? ;-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文