繁体   English   中英

Rails 4,Devise,CanCan和rails_admin问题?

[英]Rails 4, Devise, CanCan and rails_admin issues?

我一直在尝试设置rails_admin并使用Rails 4.0.4,但是不幸的是我遇到了一些问题。 我有一个设计生成的用户模型,之后将管理员添加为布尔值。 但是,即使用户是admin且需要访问rails_admin面板,我仍会获得未经授权的访问。 就像当前用户无法正确地传递到apache.rb中。 不知道这是Rails 4问题还是我做错了什么。

这是代码,有一些可行的解决方法(很丑吗?),但是我需要一个更优雅的解决方案。 谢谢。

能力

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

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  before_filter :set_current_user

  def set_current_user
    User.current = current_user
  end
end

而且,当然,我在rails_admin.rb中启用了此功能。

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

谢谢!

似乎可行,但是在添加rails_admin之前首先需要一个Devise模型。

另外,需要在rails_admin初始化程序中启用它:

config.current_user_method(&:current_user)

我注意到的两件事很奇怪(不确定它们是否是核心问题)

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

您的ApplicationContoller应该具有:

before_filter :authenticate_user!

并且您可以执行此操作(我相信您无需在Devise中执行此操作)。

 before_filter :set_current_user

  def set_current_user
    User.current = current_user
  end

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM