结合使用一些教程和截屏视频来设置Rails和CanCan以与Devise等合作。我已经建立了User
,Role
和UserRole
加入模型has_many :through
连接。我只希望一些用户能够分配某些角色,或者创建具有这些角色的新帐户等。
根据文档here,我觉得这应该非常简单。我所拥有的基本上是这样的:
if user
if user.role? 'admin'
can :manage, User
elsif user.role? 'submanager'
can :manage, User, roles: { name: ['basic', 'premium'] }
end
else
can :create, User, roles: { name: ['basic'] }
end
然后我只需用以下形式测试它:
- if can? :create, User, roles: { name: 'admin' }
= check_box 'user[role_ids]', 'admin'
或者,至少,这是要点。相信我,我已经尝试过单数,复数,role_ids
,role
,role: [ ]
的所有组合。所以我认为这不是那么简单。无论我做什么,can?
检查都会通过。每次。没有失败。
我在CanCan上发现了很多东西,但我似乎无法找到这个具体的东西。是因为我试图滥用CanCan,我应该以其他方式这样做吗?或者......我该怎么做?
答案 0 :(得分:0)
我不认为这应该在CanCan中完成,因为CanCan的控制粒度正在发挥作用。因此,如果您真的想使用CanCan来实现您的意图,我认为您应该将“角色更改”作为方法调用而不是表单提交。
控制器文件
class UserController
def basic
user.change_role_to_basic
end
def premium
user.change_role_to_premium
end
end
能力档案
can :basic, User do
end
can :premium, User do
end