在 rails_admin 中获取登录用户关联记录
fetching logged in user associated record in rails_admin
我已经安装了 rails_admin
gem 没有任何错误它的显示模型也很糟糕,但是我有要求我需要显示 current_user
登录相关数据
e.g User has many Books so in rails admin i want only that user book but currently it's showing all users books which is default behaviour of rails_admin
我也尝试使用 cancancan
gem 来实现同样的事情,但它不起作用我的 rails_admin
初始化配置如下
rails_admin.rb
RailsAdmin.config do |config|
### Popular gems integration
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
config.parent_controller = 'ApplicationController'
## == Cancan ==
config.authorize_with :cancan,UserAbility
## == Pundit ==
# config.authorize_with :pundit
config.included_models = ["Book","User"]
config.actions do
dashboard # mandatory
index # mandatory
new
export
bulk_delete
show
edit
delete
show_in_app
end
end
UserAbility Class 实现如下
class UserAbility
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
if user.present?
can :access, :dashboard
can :manage, :Book,id:user.id
end
end
end
我认为您误解了 Rails 管理员的范围。本质上,它是您数据库的快照,用于更多管理操作,例如查询数据库中的特定内容。
您唯一可以合理地做的就是查找 given 用户的所有 Book
,默认值为 all 本书供 all 用户使用。显示中存在过滤器,以便能够根据用户的特定凭据(例如用户名、电子邮件或 ID)缩小范围。
对于概念性检查,Rails 管理中的用户未被视为或视为与您的应用程序中的用户相同。相反,请考虑使用 Rails 管理员来检查数据库中的数据,而不是显示特定的、经过身份验证的人的数据。
正如您所描述的,更合适的 Rails 方法是为该数据创建一个控制器和路由,然后简单地使用 current_user.books
获取所有书籍当前用户。
而不是 can :manage, :Book,id:user.id
,尝试使用:
can :read, Book, user_id: user.id
所以这些能力看起来像:
can :access, :rails_admin
can :dashboard
can :read, Book, user_id: user.id
我已经安装了 rails_admin
gem 没有任何错误它的显示模型也很糟糕,但是我有要求我需要显示 current_user
登录相关数据
e.g User has many Books so in rails admin i want only that user book but currently it's showing all users books which is default behaviour of rails_admin
我也尝试使用 cancancan
gem 来实现同样的事情,但它不起作用我的 rails_admin
初始化配置如下
rails_admin.rb
RailsAdmin.config do |config|
### Popular gems integration
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
config.parent_controller = 'ApplicationController'
## == Cancan ==
config.authorize_with :cancan,UserAbility
## == Pundit ==
# config.authorize_with :pundit
config.included_models = ["Book","User"]
config.actions do
dashboard # mandatory
index # mandatory
new
export
bulk_delete
show
edit
delete
show_in_app
end
end
UserAbility Class 实现如下
class UserAbility
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
if user.present?
can :access, :dashboard
can :manage, :Book,id:user.id
end
end
end
我认为您误解了 Rails 管理员的范围。本质上,它是您数据库的快照,用于更多管理操作,例如查询数据库中的特定内容。
您唯一可以合理地做的就是查找 given 用户的所有 Book
,默认值为 all 本书供 all 用户使用。显示中存在过滤器,以便能够根据用户的特定凭据(例如用户名、电子邮件或 ID)缩小范围。
对于概念性检查,Rails 管理中的用户未被视为或视为与您的应用程序中的用户相同。相反,请考虑使用 Rails 管理员来检查数据库中的数据,而不是显示特定的、经过身份验证的人的数据。
正如您所描述的,更合适的 Rails 方法是为该数据创建一个控制器和路由,然后简单地使用 current_user.books
获取所有书籍当前用户。
而不是 can :manage, :Book,id:user.id
,尝试使用:
can :read, Book, user_id: user.id
所以这些能力看起来像:
can :access, :rails_admin
can :dashboard
can :read, Book, user_id: user.id