2013-12-20 38 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