Ich habe eine Rolle in der Fähigkeit cancancan gem deklariert (Schienen 5, postgres, ersinnen):cancancan Zeilenfilters
can [:update, :show, :destroy, :index], SalesDatum do |datum|
datum.try(:user_id) == user.id #the ids just access the id's from the user object that is passed into can can and from the table
end
SalesDatum
hat ein user_id
Feld.
Dies wirkt sich auf die Show Aktionen, denn ich kann nur show
die SalesDatum, die der angemeldete user_id
Zum Beispiel hat:
http://localhost:8080/projects/19/sales_data/961 korrekt authentifiziert wird, weil das in User_id angemeldet entspricht dem user_id auf der Verkaufsdaten
http://localhost:8080/projects/19/sales_data/800 bekommt nicht korrekt authentifiziert, weil die in user_id protokolliert nicht die user_id auf der Verkaufsdaten
jedoch überein, wenn ich auf die ge gehen t Index Aktion: http://localhost:8080/projects/19/sales_data Es zeigt alle Verkaufsdaten von der @sales_data
Variable. So würde es zeigen die data.id 800 und 961.
Verkaufsdaten-Controller:
load_and_authorize_resource
def index
@sales_data = SalesDatum.where(project_id:params[:project_id])
end
Wie bekomme ich den Index Aktion nur zeigen die Daten mit dem entsprechenden User_id? Sollte Cancan das nicht nach der user_id
filtern?
Ich kann die Controller-Abfrage zu 'SalesDatum.where (project_id: params [: project_id]) bearbeiten. Where (user_id:' current_user.id') 'Aber das scheint eine wirklich schlechte Art der Authentifizierung zu sein? – HoosierCoder
Das ist der Grund, warum ich CanCanCan zugunsten von Pundit aufgegeben habe - das täuschend einfache DSL ist nicht sehr gut darin, Authentifizierungsbereiche zu definieren oder irgendetwas nicht-triviales zu handhaben. – max