2014-04-09 59 views
0

我一直在尝试设置rails_admin并使用Rails 4.0.4,但不幸的是我遇到了一些问题。我有一个设计生成的用户模型管理添加为布尔事后。但即使用户是管理员并且需要访问rails_admin面板,我也会受到未经授权的访问。这就像当前用户无法正确传入ability.rb。不知道这是否是Rails 4问题,或者我做错了什么。Rails 4,Devise,CanCan和rails_admin问题?

下面是代码,带有一点(丑陋的?)解决方法,但我需要一个更优雅的解决方案。谢谢。

ability.rb

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    # Define abilities for the passed in user here. For example: 
    # 
     user = User.current # guest user (not logged in) 
     if user.admin? 
     can :manage, :all 
     can :access, :rails_admin # needed to access RailsAdmin 
     can :dashboard   # dashboard access 
     else 
     can :read, :all 
     end 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable  

    def self.current 
    Thread.current[:user] 
    end  

    def self.current=(user) 
    Thread.current[:user] = user 
    end 
end 

application_controller.rb

​​

而且,凑rse,我在中启用了rails_admin.rb

RailsAdmin.config do |config| 
    config.authorize_with :cancan 
end 

谢谢!

+0

惨惨没有准备好rails4至今。您可以使用它,但您可能会遇到一些问题。 – LuiGi

回答

3

好像它的工作原理,但你首先需要添加rails_admin前的设计模型。

而且,这需要在rails_admin初始化启用:

config.current_user_method(&:CURRENT_USER)

+1

我有同样的问题,添加config.current_user_method(&:current_user)修复它。 – hayhorse

0

两件事情,我注意到,这是奇怪的(不知道他们中是否是核心问题)

1)你不会在任何地方进行身份验证。

您ApplicationContoller应该有:

before_filter :authenticate_user! 

而你做到这一点(我相信你并不需要在设计做的)。

before_filter :set_current_user 

    def set_current_user 
    User.current = current_user 
    end 

2)您是否尝试重新启动服务器?

我相信RailsAdmin不会自动重新加载(您可能需要破解一个特殊的黑客 - https://github.com/sferik/rails_admin/wiki/How-to:-Reloading-RailsAdmin-Config-Automatically或重新启动服务器)

+0

我不认为它需要:authenticate_user!因为我通过Devise形式登录,然后尝试打开/ admin。事情是,它不会传递当前的用户/会话或类似的东西。在发布之前,我完成了它在这里所说的:https://github.com/sferik/rails_admin/wiki/Cancan和其他来源。我担心它与我的Rails版本有关。它与我的原始文章解决方案一起工作,但与官方指南无关。也将检查重装,谢谢。 :) – NewbieOnRails