[英]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.