2017-01-19 1 views
0

J'essaie d'utiliser cancancan pour l'autorisation. Lorsque je suis un utilisateur 'group_creator' autorisé, l'accès aux groupes/new est toujours refusé.cancan :: accès refusé en utilisant concevoir et rolify

Les rôles sont-ils fonctionnels et has_role? des travaux de rolify. Donc, je pense que le problème vient avec Cancancan ou peut-être concevoir.

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 

de GroupsController.rb pertinentes

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 

J'ai essayé le débogage dans la console avec:

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 

Répondre

0

Deux choses ici.

  1. L'utilisateur a besoin de: lire ET: créer la capacité d'accéder à une nouvelle action. Cela a résolu ce problème pour moi. Après avoir tripoté avec un esprit frais ce matin, quelques conseils pour ceux qui courent à travers ce qui sont nouveaux comme moi ... Assurez-vous de redémarrer le serveur après avoir modifié la capacité.rb ... (Je ne suis pas sûr si cela faisait partie de la question hier mais j'ai pensé que je devrais le mentionner). Le wiki de Cancancan a quelques explications sur la façon d'utiliser une table d'autorisations séparée pour la modification dynamique des capacités.