J'ai un contrôleur avec une méthode comme; 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 Je pense qu'il Peut être comme; aucune idée? P> Merci. P> P> show code> dans contrôleur iff
paramètres [: format] .eql? ("CSV") code> p>
peut: montrer, ressource si les paramètres [: format] .eql? ("CSV") code>. Alors, comment puis-je envoyer des paramètres à capacité.rb? P>
3 Réponses :
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
Parfait - sauf indenté par 4 espaces: D
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
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.
La réponse la plus récente est dans le Wiki Cancan: https://github.com/ryanb/cancan / wiki / accès-demande-demande-Data P>