Необходимо проверить пользователя и проект - либо
isLinkedOwner - создатель проекта, либо
isLinked - сотрудник проекта.
Необходимо проверить, что меню принадлежит проекту -
delete - тут и возникли проблемы (если мы берем меню другого проекта, он подтягивает в полиси по связи именно проект текущего меню, а не который мы передавали. Только в контроллере модели те, которые нужны, в полиси по связи они всегда принадлежат друг другу - какое бы мы меню не передали).
# ProjectPolicy
public function isLinked(User $user, Project $project)
{
return $project->users()->exists($user->id);
}
public function isLinkedOwner(User $user, Project $project) {
return $user->id === $project->user_id;
}
public function isAdmin(User $user, Project $project) {
return $this->isLinkedOwner($user, $project) || ($user->isAdmin() && $this->isLinked($user, $project));
}
# MenuPolicy
public function __construct()
{
$this->projectPolicy = new ProjectPolicy;
}
public function delete(User $user, Menu $menu) {
// dd($menu->project->id, $menu->project_id);
return $this->projectPolicy->isAdmin($user, $menu->project);
}
# MenuModel
public function project()
{
return $this->belongsTo(Project::class);
}