2017-06-28 2 views
0

ich in Rails 5. eine sehr einfache Genehmigung auf meiner Property Klasse setzen bin versucht, habe ich den can :read Zustand ability.rb hinzugefügt und verwenden load_and_authorize_resource in meinem Controller und ich kann es nicht einmal erhalten um die Beute zu treffen, geschweige denn, die Aktion :show zu autorisieren. Fehle ich etwas Offensichtliches?CanCanCan: Leseblock nicht funktioniert

# ability.rb 

class Ability 
    include CanCan::Ability 

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

    can :read, Property do |property| 
     binding.pry 
     PropertyUser.find_by(property_id: property.id, user_id: user.id) 
    end 
    end 
end 




# properties_controller.rb 

class PropertiesController < ApplicationController 
    before_action :set_property, only: [:show, :edit, :update] 
    load_and_authorize_resource 
    skip_authorize_resource :only => [:new, :create] 

    def show 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 

    private 

    def set_property 
    @property = Property.find(params[:id]) 
    end 
end 

Danke.

+0

AFAIK, es versucht, die Controller-Aktion Namen zu autorisieren, daher würden Sie nicht zu genehmigen versuchen: lesen, aber: show, vielleicht ist es das, was los ist auf. – jfornoff

+0

Hey danke für die Antwort, ich habe es tatsächlich schon versucht und es hat das Problem nicht gelöst –

+0

Es gibt ein paar mehr Dinge, ich denke, du kannst 'set_property' loswerden, Cancancan sollte das für dich tun, egal wie. – jfornoff

Antwort

0

anstelle von load_and_authorize_resource, können Sie einfach authorize_resource verwenden und dann überprüfen. Ich denke nicht, dass wir delegate hier brauchen, weil das CanCanCan das automatisch macht. Es wird diese Methoden automatisch dem Modell User hinzufügen.

+0

Gut zu wissen, aber es hat das Problem leider nicht gelöst –

+0

Sind Sie sicher, dass Sie Objekte in Ihrer Datenbank haben? –

+0

Versuchen Sie das Debuggen wie gezeigt [hier] (https://github.com/CanCanCommunity/cancancan/wiki/Debugging-Abilities) –

0

Möglicherweise müssen Sie diesen Code haben, in Ihrem user.rb

delegate :can?, :cannot?, to: :ability 

def ability 
    Ability.new(self) 
end 
+0

Nun, ich hatte andere Autorisierungen früher arbeiten, so glaube ich nicht, das ist das Problem. Ich habe es trotzdem versucht und es hat nicht funktioniert. –

Verwandte Themen