J'ai joué avec la gemme de CanCanCan pour limiter les actions d'un utilisateur régulier, mais jusqu'ici je n'ai réussi qu'à limiter les autorisations à un modèle entier, et ce dont j'ai vraiment besoin est de limiter l'accès certains de ses attributs. Par exemple, sur mon modèle Utilisateur, en plus de l'utilisateur/mot de passe/email, j'ai un booléen pour admin, que j'utilise pour valider le statut de l'utilisateur connecté, auquel cas si user.admin ?, il peut accéder à/gérer tout, sinon, il devrait être capable de lire tout, et ne peut mettre à jour son propre enregistrement si le user.id correspond.CanCanCan: autoriser/interdire des attributs de modèle spécifiques
J'ai lu la documentation et à travers pour travers de nombreuses fois, le plus proche je suis arrivé ajoutais cette app/modèles/ability.rb
can :update, :users, [:name, :password, :email]
qui ne fait rien.
Ainsi,
Le problème: L'utilisateur peut soit: mettre à jour le modèle entier, ou tout simplement: lire, je ne peux pas le mettre à: mettre à jour ou: lire les attributs spécifiques.
Ce dont j'ai besoin: L'utilisateur à capable de: modifier uniquement les attributs spécifiques.
La question: Quelle est la syntaxe correcte pour limiter les attributs? Y at-il une autre configuration que je dois définir sur d'autres fichiers?
Mon fichier Ability.rb:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.admin?
can :manage, :all
can :import, [User, Enclosure, Blade, Component]
else
can :access, :rails_admin
can :dashboard
can :read, :all
can :history, :all
# Allows user to only edit an enclosure, if it's allocated to itself, or not allocated at all
can :update, Enclosure do |enclosure|
can :update, Enclosure if (enclosure.allocated_to == user.email && enclosure.allocation == true) || enclosure.allocation == false
end
end
end
end
Gems J'utilise (en plus des 4 gemmes par défaut Rails):
# Administration Panel Gems
gem 'rails_admin' # Rails Administration Panel Gem
gem 'rails_admin_history_rollback' # Enables users to visualize and revert history
gem 'rails_admin_import', "~> 1.0.0" # Enables importing
gem 'devise' # Authentication Gem
gem 'cancancan' # Authorization Gem
gem 'paper_trail', '~> 4.0.0.rc' # Auditing Gem (History)
Merci!