2014-11-24 80 views
4

在我的Rails应用程序网站中,访问者可以注册并创建内容。它使用设计与用户模型,一切运作良好。Rails_admin:我应该拥有admin_user还是具有admin角色的用户来管理用户和管理面板

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

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

如果我用户只有一个模型,那么我希望用户在登录后重定向到管理面板,如果用户是管理员,如果没有,那么我希望用户被重定向到他们的个人资料。并且哪个授权库cancan或pundit将是 更适合我的情况。

谢谢!

回答

4

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

我更喜欢将Admin模型与User模型分开。

其中一个原因是我喜欢能够从Rails 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,只有在需要时才能检查权限。根据我的经验,专家也更加灵活。

+0

@Monkbroc嗨只是好奇你是如何实现的权威人士多用户类(如:管理员和用户) – jufemaiz 2015-05-12 00:59:39

+0

当然@jufemaiz。你可以发表一个关于多个模型的专家的问题,我会回答吗? – monkbroc 2015-05-13 01:46:01

+0

会做@monkbroc – jufemaiz 2015-05-13 02:31:30

0

补充monkbroc答案:

对于我来说,在回报率4,变量:admin和:current_admin从来没有工作过。看到有关该问题的一些页面,是不是监狱长在注册时设计的角色是不是一个模式,而是一个枚举...,发现这样的另一种解决方案:

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

相关问题