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

Ruby on rails RubyonRails中的用户层次结构设计,ruby-on-rails,authentication,authorization,hierarchy,Ruby On Rails,Authentication,Authorization,Hierarchy,我有一个需要身份验证的应用程序,并且有一个用户模型。根据以下规则,有4个级别的授权: 级别1用户可以创建/编辑/删除所有级别2、3和4用户 级别2用户可以创建级别3和级别4用户,并仅编辑他们拥有的用户 级别3和级别4无权创建/编辑/删除用户 更新:3级和4级用户可以有多个2级父用户 除此之外,我希望所有用户都能够通过单个界面登录 有没有处理这种层次结构的模式?使用授权插件(如)将允许我定义不同级别的授权,但不能定义不同用户之间的关系 基本上,我希望设计能使我编写如下控制器代码: @level_t

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

  • 级别1用户可以创建/编辑/删除所有级别2、3和4用户
  • 级别2用户可以创建级别3和级别4用户,并仅编辑他们拥有的用户
  • 级别3和级别4无权创建/编辑/删除用户
  • 更新:3级和4级用户可以有多个2级父用户
  • 除此之外,我希望所有用户都能够通过单个界面登录

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

    基本上,我希望设计能使我编写如下控制器代码:

    @level_two_users = current_user.find_all_my_level_two_users
    

    谢谢

    您可以向您的用户模型中添加属性
    级别
    ,以及查询允许用户的方法

    要获得X级的所有用户,只需使用类似“代码>用户”的查询。按级别(2)查找所有用户。

    类用户
    可访问属性:级别
    允许def编辑用户?(用户)
    case self[:级别]
    当1
    用户级别>1
    当2
    user.level>2&&user.created_by?(self)
    结束
    假的
    结束
    def允许_创建_用户_级别?(级别)
    
    self[:level]您可以向您的用户模型添加属性
    level
    ,以及查询允许用户的方法

    要获得X级的所有用户,只需使用类似“代码>用户”的查询。按级别(2)查找所有用户。

    类用户
    可访问属性:级别
    允许def编辑用户?(用户)
    case self[:级别]
    当1
    用户级别>1
    当2
    user.level>2&&user.created_by?(self)
    结束
    假的
    结束
    def允许_创建_用户_级别?(级别)
    
    self[:level]感谢您的回复arnep,我正在尝试使用您的解决方案,并且遇到了另一个障碍,您可以检查我上面的更新吗?@pingu您可以使用
    :与
    创建者
    有许多关系(一个用户有许多其他用户作为创建者)。然后你可以使用
    created by?
    方法来查询此关系。感谢回复arnep,我正在尝试使用你的解决方案,并遇到了另一个障碍,你可以检查我上面的更新吗?@pingu你可以使用
    :与
    创建者有多个
    关系(一个用户有许多其他用户作为创建者)。然后,您可以使用由?
    创建的
    方法来查询此关系。
    
    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