2011-05-15 66 views
1

我有一個需要身份驗證的應用程序,並且有一個用戶模型。有以下規則的4級授權:Ruby on Rails中的用戶層次結構設計

  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 

感謝

回答

1

你可以一個屬性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級用戶? ;-)

+0

感謝您的回覆arnep,我試圖用您的解決方案運行,並擊中了另一個障礙,請問您是否可以檢查我的更新? – pingu 2011-05-15 15:53:11

+0

@pingu您可以對'creator'使用':has_many'關係(一個用戶有許多其他用戶作爲創建者)。然後你可以使用'created_by?'方法來查詢這個關係。 – arnep 2011-05-15 20:02:44