我有一个rails应用程序,我在其中设置了一个表:users
另一个表:roles
,最后是一个连接表:user_roles
用户可能有很多角色,但是角色belong_to_and_has_many :users
这使我能够创建新角色,然后假设用户是管理员,在用户编辑页面上切换他们的角色。
这很棒,目前没有角色有能力。我在想的是:
has_and_belongs_to_many :roles
虽然您可以创建角色,但您无法创建功能。所以你会有一个预定的功能列表。此外,某些角色(例如管理员或成员)无法销毁或编辑。 (已经完成了。)
我可以设置表和关系来做到这一点,我无法弄清楚如何将这个概念与cancan集成。因为可以做类似的事情:
can? :destroy @project
如果我分配,请说:
角色:编辑(字符串名称) 功能:读取,写入,销毁,更新,预览(这些只是字符串名称)
我怎么能说:
可以吗? user.role?编辑阅读帖子 - seudo代码。
答案 0 :(得分:2)
首先,对于功能而言,如果它是您正在使用的固定功能列表,那么在角色表上使用多个布尔值可能会更好,例如can_create_projects
,can_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