0

我有一堆被 belongs_to 实践识别的用户

所有不是管理员的用户 (has_role?:admin) 都是实践的成员。

我希望能够暂停练习用户,以便他们都是只读的。

然后我希望能够重新激活它们。

我正在使用 devise 和 cancan / rolify

我对实现这一目标的最佳方法感到困惑。

所以用户可能有角色 :practice_super_user 或 :practice_assistant

当我暂停他们时,我想让他们仍然可以访问他们的信息,但只能是只读的(不添加或更新)。

然后当我重新激活它们时,我希望它们恢复到原来的能力。

是否有捷径可寻?最合乎逻辑的方法是什么?

我担心如果我只是将角色更改为 :read_only 我会失去原来的角色 或者我必须通过并编辑每个控制器......等等如果我尝试将它挂在练习中的参数上,例如练习.suspended == 真

有什么想法吗?

4

2 回答 2

0

最终添加了暂停的角色

通过将其添加到我的更新控制器,将其应用于实践的所有用户

if @practice.suspended == true
      @practice.users.each do |user|
        user.add_role(:suspended)
      end
    else
      @users = @practice.users
      @users.each do |user|
        user.remove_role(:suspended)
      end
    end

然后把

if user.has_role? :suspended
  can :read, Practice, :id => user.practice_id
  can :read, Task, :practice_id => user.practice_id
  can :read, Client, :practice_id => user.practice_id
else
  all my other abilities

仅适用于用户可以拥有多个角色的情况,我不认为这是最优雅的方式,但它有效并且可能会帮助其他人在这方面苦苦挣扎。

于 2013-10-30T13:05:46.977 回答
0

我建议您在您的用户模型中添加一个布尔字段,名为suspended.

然后检查CanCan是否设置。

能力.rb

unless user.suspended?
  # Define abilities here.
end

这将确保用户只有在未被暂停时才能访问这些功能。

要取消暂停他,您只需设置suspended = false.

这样,您不必更改任何现有角色,用户一旦不再被暂停,就可以再次访问所有内容。

于 2013-10-24T10:04:56.207 回答