2013-12-20 50 views
1

我有我在那裏建立了一個表Rails應用程序:users另一個表:roles最後一個連接表:user_roles,其中用戶可以擁有多個角色,但角色belong_to_and_has_many :users使用慘慘將權限分配給角色

這允許我創建新角色,然後假設用戶是管理員,在用戶編輯頁面上切換角色。

這真是太好了,目前還沒有任何角色具備功能。我在想是這樣做的:

  • role_permissions表
  • 權限:has_and_belongs_to_many :roles
  • 設置一組角色編輯頁面上的複選框來分配一組能力 來表示的角色,然後可以應用於所述用戶,然後可由水豚使用以確定用戶是否具有適當的動作。

雖然您可以創建角色,但無法創建功能。所以你會有一個預先確定的功能列表。還有一些角色,如管理員或成員不能銷燬或編輯。 (已完成)

我可以設置表格和關係來做到這一點,我無法弄清楚如何做的是將這個概念與康康一體化。因爲這樣可以做一些事情,如:

can? :destroy @project 

如果我給你,說:

角色:編輯器(字符串名稱) 能力:讀,寫,銷燬,更新,預覽(這些只是字符串名稱)

我怎麼能那麼說:

可以嗎? user.role?編輯閱讀Post - seudo代碼。

回答

2

首先,對於功能,如果它是你正在使用的固定功能列表,那麼你最好在角色表上有大量的布爾值,例如: can_create_projectscan_create_users等,它們編碼每個角色的能力。

那麼你的康康舞能力類可能有類似於下面的東西,

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    can(:create, Project) do |project| 
     user.roles.any?(&:can_create_projects) 
    end 
    end 
end