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

Ruby on rails 如何使用CanCan限制用户角色分配?,ruby-on-rails,devise,authorization,cancan,Ruby On Rails,Devise,Authorization,Cancan,使用一些教程和屏幕广播的组合来设置Rails和CanCan以与Desive等一起工作。我已经建立了用户,角色,并且用户角色的加入模型有很多:通过连接。我只希望一些用户能够分配某些角色,或者使用这些角色创建新帐户,等等 根据文档,我觉得这应该非常简单。我基本上是这样的: if用户 如果user.role?“管理员 can:管理、用户 elsif user.role?“副经理 can:管理,用户,角色:{name:['basic','premium']} 终止 其他的 can:创建、用户、角色:{n

使用一些教程和屏幕广播的组合来设置Rails和CanCan以与Desive等一起工作。我已经建立了
用户
角色
,并且
用户角色
的加入模型有很多:通过连接。我只希望一些用户能够分配某些角色,或者使用这些角色创建新帐户,等等

根据文档,我觉得这应该非常简单。我基本上是这样的:

if用户
如果user.role?“管理员
can:管理、用户
elsif user.role?“副经理
can:管理,用户,角色:{name:['basic','premium']}
终止
其他的
can:创建、用户、角色:{name:['basic']}
终止
然后我会简单地用以下方法测试它:

- if can? :create, User, roles: { name: 'admin' }
    = check_box 'user[role_ids]', 'admin'
或者,至少,这是要点。相信我,我尝试过单数、复数、
role\u id
role
role:[]
。所以我不认为这是那么简单的事情。无论我做什么,
都可以检查通过。每一次。毫无疑问


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

我认为这不应该在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

但这并不是那么简单,不是吗?我的意思是,在他们的文档中,这个例子怎么样:
can:manage,Project,:group=>{:id=>user.group_-ids}