如何使用CanCan限制用户角色分配?

时间:2014-03-07 08:01:17

标签: ruby-on-rails devise authorization cancan

结合使用一些教程和截屏视频来设置Rails和CanCan以与Devise等合作。我已经建立了UserRoleUserRole加入模型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_idsrolerole: [ ]的所有组合。所以我认为这不是那么简单。无论我做什么,can?检查都会通过。每次。没有失败。

我在CanCan上发现了很多东西,但我似乎无法找到这个具体的东西。是因为我试图滥用CanCan,我应该以其他方式这样做吗?或者......我该怎么做?

1 个答案:

答案 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