cancan:限制用户根据角色设置某些模型属性的能力

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

有一个模型:published属性(布尔型)和用户模型role属性()。有三个角色:ROLES = %w[admin publisher author]

使用的是cancan(和RailsAdmingem),简化的Ability.rb文件如下所示:

class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new

    if user.role? :admin
      can :manage, :all
    elsif user.role? :publisher
      can :manage, Post
    elsif user.role? :author
      # I want to prevent these guys from setting the :published attribute
    end

  end
end

提问于
用户回答回答于
用户回答回答于

看看这篇文章:How do I use CanCanwith rails admin to check for ownership

它展示了如何根据用户角色使字段不可见。

UPDATE I能够使用以下代码在Rails管理中设置选项:

config.model User do
  edit do
    configure :organization do
      visible do
        bindings[:view]._current_user.max_role_name != 'admin' ? false : true
      end
    end

    configure :organization_id, :hidden do
      visible do
        true if bindings[:view]._current_user.max_role_name != 'admin'
      end
      default_value do
        bindings[:view]._current_user.organization_id if bindings[:view]._current_user.max_role_name != 'admin'
      end
    end

    include_all_fields
  end
end

如果登录用户不是管理员,此配置将隐藏组织字段。然后它将显示一个组织。_ID字段(设置为type=‘隐含’)并设置默认值。

扫码关注云+社区