8
votes

Passer des params à Cancan dans ROR

J'ai un contrôleur avec une méthode comme; xxx

mais j'ai des utilisateurs ayant des rôles différents. J'utilise donc Cancan pour gérer le contrôle d'accès. Maintenant je veux que x rôle puisse faire l'action show dans contrôleur iff paramètres [: format] .eql? ("CSV")

Je pense qu'il Peut être comme; peut: montrer, ressource si les paramètres [: format] .eql? ("CSV") . Alors, comment puis-je envoyer des paramètres à capacité.rb?

aucune idée?

Merci.


0 commentaires

3 Réponses :


27
votes

Dans ApplicationController Ajoutez les éléments suivants:

# CanCan - pass params in to Ability
# https://github.com/ryanb/cancan/issues/133
def current_ability
  @current_ability ||= Ability.new(current_user, params)
end


1 commentaires

Parfait - sauf indenté par 4 espaces: D



1
votes

peut code> prend deux arguments: tout d'abord est le type d'action que l'utilisateur tente d'effectuer une ressource, une autre est la ressource (peut être une variable de classe ou une variable d'instance) elle-même. Si vous avez vos capacités correctement, vous devriez pouvoir faire quelque chose comme ceci:

#models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)

    if user.role? :admin
      can :manage, :all
    elsif user.role? :hiring_manager
      can [:read, :update], Post, user_id: user.id
    end
  end
 end

#controllers/posts_controller.rb
class PostsController < ApplicationController::Base
  before_filter :authenticate_user

  def show
    @post = Post.find(params[:id])
    authorize! :read, @post # will thorow an exception if not allowed
  end
end 


1 commentaires

Eh bien, beau exemple Simon mais ce n'est pas ce que je cherche. Parce que je viens d'utiliser des params [: format] pour décider du comportement de la méthode. Dans votre exemple, vous utilisez des params pour trouver un enregistrement. Les passages d'enregistrement à la capacité de décider du contrôle d'accès. Mais je n'utilise pas les paramètres de votre chemin.



7
votes

La réponse la plus récente est dans le Wiki Cancan: https://github.com/ryanb/cancan / wiki / accès-demande-demande-Data


0 commentaires