使用CanCan为角色分配权限

时间:2013-12-20 22:00:32

标签: ruby-on-rails permissions cancan roles jointable

我有一个rails应用程序,我在其中设置了一个表:users另一个表:roles,最后是一个连接表:user_roles用户可能有很多角色,但是角色belong_to_and_has_many :users

这使我能够创建新角色,然后假设用户是管理员,在用户编辑页面上切换他们的角色。

这很棒,目前没有角色有能力。我在想的是:

  • role_permissions表
  • 权限:has_and_belongs_to_many :roles
  • 在角色编辑页面上设置一组复选框以分配一组功能 到所述角色,然后可以应用于所述用户,然后可以由水豚使用以确定用户是否具有适当的动作。

虽然您可以创建角色,但您无法创建功能。所以你会有一个预定的功能列表。此外,某些角色(例如管理员或成员)无法销毁或编辑。 (已经完成了。)

我可以设置表和关系来做到这一点,我无法弄清楚如何将这个概念与cancan集成。因为可以做类似的事情:

can? :destroy @project

如果我分配,请说:

角色:编辑(字符串名称) 功能:读取,写入,销毁,更新,预览(这些只是字符串名称)

我怎么能说:

可以吗? user.role?编辑阅读帖子 - seudo代码。

1 个答案:

答案 0 :(得分:2)

首先,对于功能而言,如果它是您正在使用的固定功能列表,那么在角色表上使用多个布尔值可能会更好,例如can_create_projectscan_create_users等,它们编码每个角色的能力。

然后你的CanCan Ability类可能会有以下内容,

class Ability
  include CanCan::Ability

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