首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails_admin:我应该让admin_user或具有管理员角色的用户来管理用户和管理面板

问Rails_admin:我应该让admin_user或具有管理员角色的用户来管理用户和管理面板
EN

Stack Overflow用户
提问于 2014-11-24 18:34:40
回答 2查看 4.4K关注 0票数 6

在我的rails应用程序网站中,访问者可以注册并创建内容。它使用带有用户模型的devise,一切都运行良好。

现在我想使用rails_admin来管理网站资源和用户等,只有具有管理权限的人才能访问它。

我应该为管理面板访问创建一个单独的AdminUser模型,还是使用具有管理员角色的用户模型,并使用一些授权库来管理访问。

如果我只使用一个模型,然后我希望用户登录后重定向到管理面板,如果用户是管理员,如果不是,那么我希望用户被重定向到他们的个人资料。哪一个授权库更适合我的情况。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-12-13 02:25:57

问得好。我在我的项目中使用了Rails Admin和Pundit。

我更喜欢将管理模型与用户模型分开。

其中一个原因是,我喜欢能够从Rails Admin中“成为用户”,以便在他们遇到问题时能够帮助他们。当您有单独的用户和管理员模型时,这更容易做到。

Admin模型可以非常简单。使用rails generate devise Admin生成它

然后在你的config/initializers/rails_admin.rb中添加

代码语言:javascript
复制
config.authenticate_with do
  warden.authenticate! :scope => :admin
end

config.current_user_method(&:current_admin)

要重定向到正确的配置文件,请将此方法添加到您的ApplicationController

代码语言:javascript
复制
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中设置此配置

代码语言:javascript
复制
config.sign_out_all_scopes = false

为了回答你的另一个问题,我同时使用了CanCan和Pundit。我更喜欢Pundit,因为使用CanCan时,每个请求的所有权限都会被评估。使用Pundit时,仅在需要时检查权限。在我的经验中,评论员也更灵活。

票数 5
EN

Stack Overflow用户

发布于 2015-04-29 11:03:02

补充monkbroc答案:

对我来说,在RoR 4中,admin和:current_admin变量从来都不起作用。看了一些关于这个问题的页面,是典狱长在Devise不是一个模型而是一个枚举时没有注册角色...并找到了另一个类似这样的解决方案:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27102718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档