Gem rails_admin 的管理权限设置

rails_boys · November 23, 2012 · Last by marlborox replied at August 22, 2016 · 8617 hits

rails_admin + devise 可快速建成用户功能及管理页面。

rails g rails_admin:install可选择创建User模型,默认情况是所有注册的 User 都可以登录管理页面,所以再用 devise 创建 Admin:rails generate devise admin,在config/initializer/rails_admin.rb中设置config.current_user_method { current_admin }。 这样一来用户权限区分开了,但 rails_admin 的secondary_navigation貌似写死了:

- if _current_user
    - if user_link = edit_user_link
      %li= user_link
    - if defined?(Devise) && (devise_scope = request.env["warden"].config[:default_scope] rescue false) && (logout_path = main_app.send("destroy_#{devise_scope}_session_path") rescue false)
      %li= link_to content_tag('span', t('admin.misc.log_out'), :class => 'label label-important'), logout_path, :method => Devise.sign_out_via
    - if _current_user.respond_to?(:email) && _current_user.email.present?
      %li= image_tag "#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", :style => 'padding-top:5px'

https://github.com/sferik/rails_admin/blob/master/app/views/layouts/rails_admin/_secondary_navigation.html.haml 不是当前用户(而非当前管理员)无法显示链接,大家是怎么处理的?

在你项目目录里新建 app/views/layouts/rails_admin/_secondary_navigation.html.haml 文件就可以覆盖 rails_admin 的了。

請問我增加權限,使用 gem devise/cancancan/rolifty,model -> admin.rb and admin_ability.rb。

請問我應該哪裡加 load_and_authorize_resource。目前都沒有權限效果。同時 admin role 都有加入 superadmin/admin/activeadmin 我加在這裡 rails_admin/app/controllers/rails_admin/main_controller.rb,這個出現錯誤 "uninitialized constant Main"

請問怎麼解決呢?

版本: gem 'rails', '~> 5.0.0.rc2' gem 'cancancan' gem "rolify" gem 'rails_admin', '1.0.0.rc'

rails_admin.rb ... ## == Devise == config.authenticate_with do warden.authenticate! scope: :admin end

config.current_user_method(&:current_admin)

## == Cancan == config.authorize_with :cancan, AdminAbility ...

admin.ability.rb class AdminAbility include CanCan::Ability def initialize(user) if user && user.admin? can :access, :rails_admin
can :dashboard if user.role? :superadmin can [:read, :create, :update], User # can :manage, :all elsif user.role? :admin can :manage, [Blog, BlogCategory, Video] can [:read, :create, :update], User elsif user.role? :activeadmin can :manage, [Event, EventAttendance, EventContact, User] can [:read, :update], User # can :update, Product, :hidden => false end end end end

You need to Sign in before reply, if you don't have an account, please Sign up first.