Alimentalos/Backend

View on GitHub
app/Policies/PhotoablesPolicy.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php


namespace App\Policies;


use App\Contracts\Resource;
use App\Models\Photo;
use App\Models\User;
use Illuminate\Support\Str;

trait PhotoablesPolicy
{
    /**
     * Determine whether the user can attach photo to the user.
     *
     * @param User $user
     * @param Resource $model
     * @param Photo $photo
     * @return mixed
     * @throws \ReflectionException
     */
    public function attachPhoto(User $user, Resource $model, Photo $photo)
    {
        return $user->is_admin ||
            users()->isProperty($photo, $user) &&
            $user->can('view', $model) &&
            $user->can('view', $photo) &&
            !in_array($model->id, $photo->{Str::lower(Str::plural((new \ReflectionClass($model))->getShortName()))}->pluck('uuid')->toArray());
    }

    /**
     * Determine whether the user can detach photo to the user.
     *
     * @param User $user
     * @param Resource $model
     * @param Photo $photo
     * @return mixed
     * @throws \ReflectionException
     */
    public function detachPhoto(User $user, Resource $model, Photo $photo)
    {
        return $user->is_admin ||
            users()->isProperty($photo, $user) &&
            $user->can('view', $model) &&
            $user->can('view', $photo) &&
            in_array($model->uuid, $photo->{Str::lower(Str::plural((new \ReflectionClass($model))->getShortName()))}->pluck('uuid')->toArray());
    }
}