77 lines
2.3 KiB
PHP
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'));
|
|
}
|
|
}
|