vernova/app/Policies/ProjectPolicy.php
2026-07-26 19:58:27 +03:30

77 lines
2.3 KiB
PHP

<?php
namespace App\Policies;
use App\Models\User;
use App\Models\Project;
class ProjectPolicy
{
/**
* Determine whether the user can view any projects.
* Must belong to same tenant and have the permission.
*/
public function viewAny(User $user): bool
{
return $user->tenant_id === session('tenant_id')
&& ($user->hasRole('admin')
|| $user->hasRole('manager')
|| $user->hasPermissionTo('view projects'));
}
/**
* Determine whether the user can view the project.
*/
public function view(User $user, Project $project): bool
{
return $user->tenant_id === $project->tenant_id
&& ($user->hasRole('admin')
|| $user->hasRole('manager')
|| $user->hasPermissionTo('view projects')
|| $project->users()->where('user_id', $user->id)->exists());
}
/**
* Determine whether the user can create projects.
*/
public function create(User $user): bool
{
return $user->tenant_id === session('tenant_id')
&& ($user->hasRole('admin')
|| $user->hasRole('manager')
|| $user->hasPermissionTo('create projects'));
}
/**
* Determine whether the user can update the project.
*/
public function update(User $user, Project $project): bool
{
return $user->tenant_id === $project->tenant_id
&& ($user->hasRole('admin')
|| ($user->hasRole('manager') && $project->manager_id === $user->id)
|| $user->hasPermissionTo('edit projects'));
}
/**
* Determine whether the user can delete the project.
*/
public function delete(User $user, Project $project): bool
{
return $user->tenant_id === $project->tenant_id
&& ($user->hasRole('admin')
|| $user->hasPermissionTo('delete projects'));
}
/**
* Determine whether the user can manage project members.
*/
public function manageMembers(User $user, Project $project): bool
{
return $user->tenant_id === $project->tenant_id
&& ($user->hasRole('admin')
|| ($user->hasRole('manager') && $project->manager_id === $user->id)
|| $user->hasPermissionTo('manage project members'));
}
}