- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
到目前为止,这个组合设置中的大部分内容都运行良好。但是,当我尝试有条件地禁用过滤器时,它们总是处于启用状态。我的情况是(或多或少)我想给 Restaurant
所有者(AdminUser
角色 :restaurateur
)部分访问权限:他们可以只编辑他们自己的餐厅,我也想对他们隐藏一些字段。这行得通。但是禁用过滤器不会。让我详细说明:
# app/admin/restaurants.rb
batch_action :activate, :if => proc { can? :activate, Restaurant } do |list|
#...
end
controller do
def current_ability
@current_ability ||= Ability.new(current_admin_user)
end
end
index do
...
column :city if can? :manage, Restaurant # This works well.
end
filter :city, :if => proc { can? :manage, Restaurant } # This is always there.
能力
:
# app/models/ability.rb
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :restaurateur
cannot :manage, Restaurant
这是我在 Rails 控制台中看到的内容:
admin = AdminUser.find(1) # roles => [:admin]
restorateur = AdminUser.find(2) # roles => [:restaurateur]
Ability.new(admin).can?(:manage, Restaurant) # true
Ability.new(restorateur).can?(:manage, Restaurant) # false
我知道我没有以最好的方式使用它,比如使用 :manage
动词,在常见情况下,它并不打算提供部分访问权限。但它有效,除了禁用过滤器。
和
我应该做些什么特别的事情才能使它们真正起作用?
Rolify 在 3.2.0
。 CanCan 在 1.6.8
。 ActiveAdmin 的 GIT 版本为:b0dd8fdcfbd68984a8c2ec7f2279a121eeb66c3d
。如果我将它更新到最新的 GIT 修订版(或官方 0.5.0 版本),batch_action
总是被禁用! (因此他们也禁用了 selectable_column
。)
关于我的问题:
有没有可靠的方法来测试 ActiveAdmin 文件中的能力?也许能力被实例化的方式给了他们错误的用户(我的意思是在检查过滤器 :if
Proc 之前)?在这种情况下,can?
助手如何获得实例化的 Ability,我有点不知所措。
和
如果我的方法不正确,有条件地禁用过滤器的推荐方法是什么?
和
有人知道为什么 ActiveAdmin 的最新版本似乎完全忽略批处理操作吗?也许我应该将 controller do
block 放在 batch_action
block 之前?
感谢您的宝贵时间。
最佳答案
我遇到了同样的问题,并在此 issue 中找到了解决方案.
应用这个 monkeypatch 之后:
# config/initializers/activeadmin_filter_conditions.rb
module ActiveAdmin
module Filters
class FormBuilder < ::ActiveAdmin::FormBuilder
def filter(method, options = {})
return "" if method.blank?
if options[:if].is_a?(Proc)
return "" if !template.instance_eval(&options[:if])
end
options[:as] ||= default_input_type(method)
return "" unless options[:as]
content = input(method, options)
form_buffers.last << content.html_safe if content
end
end
end
end
您应该能够按照您提到的方式在过滤器中使用条件:
filter :city, :if => proc { can? :manage, Restaurant }
关于ruby - ActiveAdmin、CanCan、Rolify - 无法有条件地禁用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12387838/
我正在尝试设置授权/身份验证系统,但我很困惑,所以我有几个问题: 在很多教程中,人们建立了用户/角色 HABTM 关系。 我知道这允许每个用户拥有多个角色,但是如果 您希望每个用户只有一个角色,这有必
我正在尝试使用 Rails 4 制作应用程序。 我正在研究角色管理并希望使用 Rolify,因为它支持实例级角色分配。 对于其他遇到相同问题的人,下面有 2 个非常好的答案(我只能勾选一个,但我两个都
我想使用 rolify 测试多个角色。 我试过这个,但没有用: 谢谢您的帮助! 更新1 我正在尝试测试 :technician 或 :admin - 这有效,但似乎应该有更短的方法: if curr
到目前为止,这个组合设置中的大部分内容都运行良好。但是,当我尝试有条件地禁用过滤器时,它们总是处于启用状态。我的情况是(或多或少)我想给 Restaurant 所有者(AdminUser 角色 :re
我正在创建一个基于 Devise、CanCan 和 Rolify 的应用程序来处理私有(private)资源。 设计注册已被禁用,因为我不想让用户注册,而我正在创建一个管理界面来添加/编辑用户。 现在
捆绑安装 gem(gem 'rolify') 后,我使用以下命令生成了文件, rails g rolify Role User 创建了以下文件, invoke active_record creat
使用 rolify 时如何让所有用户都具有特定角色?我尝试了以下但没有帮助: User.with_role :admin 我收到以下错误: NoMethodError: undefined metho
我在使用 Heroku 上特殊配置提供的功能时遇到错误,即使它在我的机器上运行良好。 具体来说,我使用的是 Rolify 方法 is_admin?在用户上,这可以通过初始化文件中的配置设置来实现。 到
编辑! 我设置了 rolify gem 并捆绑了我的应用程序: 我补充说: gem "rolify" #to add roles like admin and member to the users
我真的很难理解在 Rails 中编写代码的基础知识。我不知道问一个更基本的问题是什么,但我似乎反复遇到类似的问题。 我已经成功地在我的 Rails 5 应用程序中设置了 rolify。我使用 roli
我正在尝试学习如何在我的 Rails 5 应用程序中使用 rolify。 我之前问过很多关于 Rolify 的问题,最近一次是 here但我找不到帮助。 我正在努力尝试弄清楚如何从用户中删除分配的角色
我正在尝试使用 Rails 4 制作应用程序。 我用 Rolify gem 定义了一系列角色。 现在,我想使用 pundit 允许具有角色的用户执行某些操作。在不止一种类型的角色可以做某事的情况下,我
我按照 rolify 的教程学习了一些基本用法。 https://github.com/RolifyCommunity/rolify/wiki/Devise---CanCanCan---rolify-
我正在使用 devise-cancan-rolify 设置来处理用户。在注册时,他们会获得读者角色。我希望能够从管理界面将他们提升为作家角色。问题是,roles 和 users_roles 表的设置方
这很奇怪。我在 Rails 3.2 应用程序中使用 Rolify + CanCan + Devise。我的用例很简单。我希望一个用户一次只有一个角色,因此要更改角色,我会执行以下操作: user.re
我可以通过以下方式轻松测试用户是否具有特定角色 if user.has_role? :admin 如何获取用户的角色名称?有点像 users = User.all user.each{ |user|
有一个应用程序,我在其中使用 Rolify 和 Pundit 进行授权,并使用 Minitest/fixtures 进行测试。 当我使用 fixtures 将用户设置为管理员时,我没有为断言返回 tr
我知道关于这个主题有很多问题,但没有一个真正回答我正在寻找的问题。 我正在尝试使用 rolify 在 cancan 中定义我的角色,我能够通过 rails 控制台创建一个管理员角色并为新用户设置默认角
使用 Rails 4.0、ActiveAdmin、Rolify 和 CanCan,通过 activeadmin 面板添加和删除用户角色不会保存(提交到数据库)。 我的 ActiveAdmin User
在 Multi-Tenancy 架构中,我可以像下面这样使用 cancan 为组织的管理员实现权限: def admin can :manage, ModelName, organization:
我是一名优秀的程序员,十分优秀!