我遇到了Rails_admin的问题。Rails_admin已成功添加到应用程序中,并且工作正常。
问题是当我尝试设置路由到特定角色用户时。
我的应用程序由几个角色组成,如用户、客户端、管理员等。我在这里想要的是,只有角色为“管理员”的用户才能使用“link_to 'rails_admin_path'”或http://127.0.0.1:3000/admin访问rails_admin部分。
我已经有了一个管理部分,所以我不想为rails_admin添加任何其他登录部分,只需要在我的管理中添加rails_admin的特性。
我还有一个名为“check_admin”的方法,它将检查current_user的角色是否为admin
current_user.check_admin
路由.rb
Rails.application.routes.draw do
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
end
这里我的要求是,给定的路由只能由管理员用户访问
提示:是否存在check_admin或current_user.roles.admin?
4条答案
按热度按时间fzwojiic1#
routes.rb
在检查特定角色的条件下更改路由,在我的情况下是"管理员"。
因此,非管理员的其他用户无论如何都无法访问rails_admin
wa7juj8i2#
应要求,扩大我之前的评论...
因此,不会阻止非管理员用户访问敏感的管理员页面,而只是向他们显示一个页面,告诉他们不允许查看内容。
bqucvtff3#
路由配置不是阻止非管理员用户访问该页的正确位置。路由配置没有current_user的概念。
应该在控制器中完成。
drnojrws4#
我很确定这就是约束的作用
https://guides.rubyonrails.org/routing.html#advanced-constraints.
https://www.mikewilson.dev/posts/rails-vanity-urls-with-route-constraints/
我们可以在用户的路由上使用Route Constraint,这样,如果路由的:id与系统中的用户名不匹配,则返回false,Rails继续下一个路由。
Explain about Route Constraint Rails
基本上是这样的
然后在路由中:
注意
ROLE
是您希望根据列属性给予访问权限的角色;即管理员、成员、客户端等