使用cancan的基于角色的授权不起作用Rails 4 - Ruby 2.1

geo*_*oom 3 ruby devise cancan ruby-on-rails-4

我使用cancan(1.6.10)和设计(3.2.2),我一直在使用cancan的作者推荐的本指南实现授权,我需要为用户分配多个角色然后我决定使用它将它存储到一个整数列中一个位掩码(我向用户模型添加了一个名为"roles_mask"的列).

我有这些文件涉及:

  1. user.rb
  2. edit.html.erb

我知道我在本指南中逐字逐句地说,除了我写的行表明角色是一个可访问的属性:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_filter :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :roles) }
  end
end
Run Code Online (Sandbox Code Playgroud)

更新用户(已记录)时,所有字段都会更新,但:roles_mask = /,我不明白为什么没有捕获角色字段.我认为有些东西是我无法实现的.有人可以帮帮我吗?

*解决方案:

使用cancancan(支持Rails 4)并更改它运行的application_controller.rb文件(因为角色是非标量属性).

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_filter :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, roles: []) }
  end
end
Run Code Online (Sandbox Code Playgroud)

rai*_*com 5

CanCan不支持Rails 4.但是你可以使用CanCanCan,它是友好的Rails4:https://github.com/CanCanCommunity/cancancan