cancan ::使用devise和rolify拒绝访问

时间:2017-01-19 20:04:38

标签: ruby-on-rails ruby devise cancan cancancan

我正在尝试使用cancancan进行授权。当我是授权的'group_creator'用户时,我仍被拒绝访问groups / new。

角色是功能性的还是has_role?来自rolify的作品。所以我认为问题来自cancancan或可能设计。

Ability.rb

def initialize(user)

  user ||= User.new # guest user (not logged in)
  alias_action :create, :read, :update, :destroy, to: :crud

  if user.has_role? :group_creator
    can :create, Group
  elsif user.has_role?(:creator, Group)
    can :manage, Group, owner_id: user.id
  elsif user.has_role?(:admin, Group)
    can :crud, Group, :id => Group.with_role(:admin, user).pluck(:id)
  else
    can :read, Group
  end
end

相关GroupsController.rb

class GroupsController < ApplicationController
  before_action :authenticate_user!
  load_and_authorize_resource

  def index
    @groups = Group.all # Can be deleted due to cancancan?
  end

  def new
    @group = Group.new # Can also be deleted due to cancancan...
  end
end

我尝试在控制台中调试:

user=User.last
user.has_role? :group_creator # returns true
group=Group.last
ability=Ability.new(user)
ability.can?(:create, Group) # returns false
ability.can?(:create, group) # returns false

1 个答案:

答案 0 :(得分:0)

这里有两件事。

  1. 用户需要:阅读AND:创建访问新操作的能力。这为我解决了这个问题。

  2. 今天早上摆弄一个清醒的头脑之后,对于其他人来说,有些建议像我这样新的...确保在改变ability.rb之后重新启动服务器......(我不确定这是不是昨天的问题的一部分,但我想我应该提到它)。 Cancancan wiki对如何利用单独的权限表进行动态修改能力有一些解释。