Как отображать сообщения с ролью, определенной в соответствии с ролью пользователя - PullRequest
1 голос
/ 17 января 2020

У меня есть сообщения и пользователи, которым я назначаю одну или несколько ролей. Роли у пользователей и сообщений одинаковы, поэтому я могу их сравнить.

Для назначения ролей я использую библиотеку spatie / laravel -permissions .

Я строю API. Я использую ресурсы Laravel.

Мне бы хотелось, чтобы сообщения с ролью "admin" могли отображаться только для пользователей с ролью "admin".

В настоящее время я не могу.

CategoryController

$categorie = Category::where('slug->' . auth()->user()->lang, $slug)
        ->with(['posts' => function ($query) {
            $query->published();
        }])->first();

return new CategoryResource($categorie);

Мой класс PostResource PostResource расширяет JsonResource

{
    public function toArray($request)
    {
        return [
            'title' => $this->title,
            'slug' => $this->slug,
            'content' => $this->content,
            'image' => $this->image,
            'status' => $this->status,
            'date' => $this->date,
            'roles' => $this->roles
        ];
    }
}

Мой CategoryResource

class CategoryResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id'   => $this->id,
            'name' => $this->name,
            'slug' => $this->slug,
            'posts' => PostResource::collection($this->whenLoaded('posts')),
            'count_posts' => $this->posts->where('status', 'published')->count(),
            //'has_new_posts' => $this->has_new_post
        ];
    }
}

Возможно ли управлять этим напрямую через ресурсы ? Или с помощью красноречивого запроса

Лично я пробовал другой подход в контроллере, но я не нахожу его хорошим, и, кроме того, у меня есть массив вместо объекта, который мне не подходит.

$categorie = Category::where('slug->' . auth()->user()->lang, $slug)
        ->with(['posts' => function ($query) {
            $query->published();
        }])->first();

    $posts = $categorie->posts;

    $postsWithGoodRole = [];

    foreach ($posts as $post) {
        if ($post->hasAnyRole(Auth::user()->roles)) {
            array_push($postsWithGoodRole, $post);
        }
    }


    return response()->json([
        'posts' => $posts
    ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...