2017-03-26 2 views
3

J'ai installé rails_admin petit bijou sans erreur ses modèles d'affichage crud aussi, mais j'ai besoin dans lequel je dois montrer current_user connecté les données associéesaller chercher utilisateur connecté enregistrement associé à rails_admin

par exemple, l'utilisateur a beaucoup Livres donc dans admin rails Je veux seulement ce livre d'utilisateur, mais actuellement il est montrant tous les utilisateurs des livres qui est le comportement par défaut de rails_admin

j'ai aussi essayer d'utiliser cancancan petit bijou pour obtenir même chose mais ca marche pas ma config rails_admin de initializers comme ci-dessous

rails_admin.rb 
RailsAdmin.config do |config| 
    ### Popular gems integration 
    ## == Devise == 
    config.authenticate_with do 
    warden.authenticate! scope: :user 
    end 
    config.current_user_method(&:current_user) 
    config.parent_controller = 'ApplicationController' 
    ## == Cancan == 
    config.authorize_with :cancan,UserAbility 
    ## == Pundit == 
    # config.authorize_with :pundit 
    config.included_models = ["Book","User"] 
    config.actions do 
    dashboard      # mandatory 
    index       # mandatory 
    new 
    export 
    bulk_delete 
    show 
    edit 
    delete 
    show_in_app 
    end 
end 

userability classe est mis en œuvre comme ci-dessous

class UserAbility 
    include CanCan::Ability 

    def initialize(user) 
    # Define abilities for the passed in user here. For example: 
     if user.present? 
     can :access, :dashboard 
     can :manage, :Book,id:user.id 
     end 
    end 
end 
+0

Comment est 'Book' défini? Avez-vous une clé étrangère à 'User'? – Makoto

+0

oui j'ai la clé étrangère dans le modèle de livre – uzaif

+0

Mécaniquement parlant alors, vous voudriez obtenir tous les livres où 'user_id' est le même que' current_user'. Pouvez-vous montrer où vous exécutez une requête comme ça? – Makoto

Répondre

3

Au lieu de can :manage, :Book,id:user.id, essayez d'utiliser:

can :read, Book, user_id: user.id 

Ainsi, les capacités regarder ensemble comme:

can :access, :rails_admin 
can :dashboard 
can :read, Book, user_id: user.id 
+0

oui vous avez raison, mais il me montre toujours accès refusé page – uzaif

+0

@uzaif: que voulez-vous dire par "toujours montrer accès refusé"? Ce n'était pas dans la description originale (sauf si je l'ai manqué). Quand cela se passe-t-il? Ma conjecture serait qu'une partie de la capacité est mal configurée ...voir mon édition ci-dessus sur la façon dont les capacités devraient être mises en place. J'ai une configuration très similaire dans un ancien projet, donc je serais surpris si cela ne fonctionne pas. – gwcodes

2

Je pense que vous êtes mal compris la portée de Rails Administrateur. En bref, il s'agit d'un instantané de votre base de données et il est destiné à d'autres opérations administratives telles que l'interrogation de votre base de données pour quelque chose de spécifique.

La seule chose que vous auriez raisonnablement en mesure de faire est de rechercher tous les Book s pour la valeur par défaut, l'utilisateur donné tombant à tous livres pour tous utilisateurs. Des filtres existent à l'écran pour pouvoir affiner en fonction des informations d'identification spécifiques d'un utilisateur, telles que son nom d'utilisateur, son adresse e-mail ou son ID.

Pour une vérification conceptuelle, un utilisateur dans Rails Admin n'est pas traité ou considéré comme un utilisateur dans votre application. Au lieu de cela, pensez à utiliser Rails Admin comme un moyen de vérifier les données dans votre base de données plutôt que d'afficher des données pour une personne authentifiée spécifique. Comme vous le décrivez, la façon la plus appropriée pour Rails de le faire serait de créer un contrôleur et une route pour ces données, et d'utiliser simplement current_user.books pour obtenir tous les livres pour l'utilisateur actuel.

+0

Merci pour l'explication, je dois donner le privilège à l'utilisateur normal pour accéder rails administration pour gérer seulement ses livres – uzaif