2017-01-19 6 views
0

私はcancancanを認証に使用しようとしています。私が認可された 'group_creator'ユーザーである場合、私はまだグループ/新規へのアクセスが拒否されています。cancan :: accessがdeviseとrolifyを使用して拒否されました

ロールは機能的であり、has_roleですか? rolify作品から。だから私は問題がcancancanで来ると思うかもしれないし、おそらく考案します。ここ

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 

答えて

0

2つのこと:

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 

私はコンソールにデバッグを試してみました。

  1. ユーザーは次を必要とします:読み込みAND:新しい操作にアクセスする能力を作成します。これは私にとってこの問題を解決しました。

  2. 今朝私は新鮮な心を抱いて、他の人たちのためにいくつかアドバイスをしてくれました。それは私のように新しいものです...能力を変更した後にサーバを再起動してください...私はそれについて言及すべきだと思った)。 Cancancan wikiには、能力の動的変更のための別個のパーミッションテーブルの利用方法に関する説明がいくつかあります。

関連する問題