Ankündigung

Einklappen
Keine Ankündigung bisher.

Laravel Policy

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Laravel Policy

    Hallo,

    ich habe ein Problem mit den Policies in Laravel 5.6 und PHP 7.1.1.

    Es gibt ein Model Restaurant:
    PHP-Code:
    namespace App;

    use 
    App\Scopes\CustomerScope;
    use 
    Illuminate\Database\Eloquent\Model;

    class 
    Restaurant extends Model
    {
        
    /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        
    protected $fillable = [
            
    'customer_id''name''telephone''email''website''description''street',
            
    'street_no''zip''city''country''local'
        
    ];

        
    /**
         * The "booting" method of the model.
         *
         * @return void
         */
        
    protected static function boot()
        {
            
    parent::boot();
            static::
    addGlobalScope(new CustomerScope);
        }

    Der Controller hat eine Store methode:

    PHP-Code:
    public function __construct()
    {
        
    $this->middleware(['api''auth:api']);
    }

    public function 
    store(Request $request)
    {
        
    $this->authorize('create'auth()->user());
        
    $this->validate($request, [
            
    'name' => 'required|min:3',
        ]);

        
    $restaurant Restaurant::create([
            
    'customer_id' => auth()->user()->customer_id,
            
    'name' => $request->input('name'),
            
    'telephone' => $request->input('telephone'),
            
    'email' => $request->input('email'),
            
    'website' => $request->input('website'),
            
    'description' => $request->input('description'),
            
    'street' => $request->input('location')['street'],
            
    'street_no' => $request->input('location')['street_no'],
            
    'zip' => $request->input('location')['zip'],
            
    'city' => $request->input('location')['city'],
            
    'country' => $request->input('location')['country'],
            
    'local' => $request->input('location')['local'],
        ]);

        return 
    response()->json([
            
    'success' => true,
            
    'id' => $restaurant->id,
            
    'message' => 'Dein Restaurant wurde erfolgreich angelehgt.'
        
    ], 200);

    Und dann die Policy, die im 'AuthServiceProvider' registriert ist:
    PHP-Code:
    protected $policies = [
        
    Restaurant::class => RestaurantPolicy::class,
    ]; 
    PHP-Code:
    namespace App\Policies;

    use 
    App\User;
    use 
    App\Restaurant;
    use 
    Illuminate\Auth\Access\HandlesAuthorization;

    class 
    RestaurantPolicy
    {
        use 
    HandlesAuthorization;

        public function 
    view(User $userRestaurant $restaurant)
        {
            return 
    true;
        }

        public function 
    create(User $user)
        {
            return 
    true;
        }

        public function 
    update(User $userRestaurant $restaurant)
        {
            return 
    true;
        }

        public function 
    delete(User $userRestaurant $restaurant)
        {
            return 
    true;
        }

    Obwohl ich über true zurückgebe, bekomme ich den Fehler 'This action is unauthorized.'. Das gleiche passiert in den Controller Funktionen show, update, destroy auch wenn ich '$this->authorize('create', auth()->user());' einfüge.

    Was mache ich falsch?

    Liebe Grüße
    Kerstel





  • #2
    Probier mal
    PHP-Code:
    $this->authorize('create'Restaurant::class);
    // oder
    $this->authorize('update'$restaurant); 
    Die Berechtigung wird immer für den eingeloggten User bestimmt, aber du möchtest ja ein neues Objekt der Restaurant-Klasse anlegen. Beim bearbeiten/löschen kannst du dann das konkrete Objekt übergeben

    Kommentar


    • #3
      Ah das wars. Ich danke dir

      Kommentar

      Lädt...
      X