在我的rails应用程序网站中,访问者可以注册并创建内容。它使用带有用户模型的devise,一切都运行良好。
现在我想使用rails_admin来管理网站资源和用户等,只有具有管理权限的人才能访问它。
我应该为管理面板访问创建一个单独的AdminUser模型,还是使用具有管理员角色的用户模型,并使用一些授权库来管理访问。
如果我只使用一个模型,然后我希望用户登录后重定向到管理面板,如果用户是管理员,如果不是,那么我希望用户被重定向到他们的个人资料。哪一个授权库更适合我的情况。
谢谢!
发布于 2014-12-13 02:25:57
问得好。我在我的项目中使用了Rails Admin和Pundit。
我更喜欢将管理模型与用户模型分开。
其中一个原因是,我喜欢能够从Rails Admin中“成为用户”,以便在他们遇到问题时能够帮助他们。当您有单独的用户和管理员模型时,这更容易做到。
Admin模型可以非常简单。使用rails generate devise Admin生成它
然后在你的config/initializers/rails_admin.rb中添加
config.authenticate_with do
warden.authenticate! :scope => :admin
end
config.current_user_method(&:current_admin)要重定向到正确的配置文件,请将此方法添加到您的ApplicationController
def after_sign_in_path_for(resource)
if resource.class == Administrator
rails_admin_path
else
# Change profile_path to where you want regular users to go
stored_location_for(resource) || profile_path
end
end为了防止在从当前用户注销时从当前管理员注销,请在config/initializers/devise.rb中设置此配置
config.sign_out_all_scopes = false为了回答你的另一个问题,我同时使用了CanCan和Pundit。我更喜欢Pundit,因为使用CanCan时,每个请求的所有权限都会被评估。使用Pundit时,仅在需要时检查权限。在我的经验中,评论员也更灵活。
发布于 2015-04-29 11:03:02
补充monkbroc答案:
对我来说,在RoR 4中,admin和:current_admin变量从来都不起作用。看了一些关于这个问题的页面,是典狱长在Devise不是一个模型而是一个枚举时没有注册角色...并找到了另一个类似这样的解决方案:
config.authorize_with do |controller|
unless current_user.try(:admin?)
flash[:error] = "You are not an admin"
redirect_to 'visitors#index'
end
end代码来自另一个答案:Authenticate using Devise and Rails Admin for particular routes
https://stackoverflow.com/questions/27102718
复制相似问题