44 خطوط
1.1 KiB
PHP
44 خطوط
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Policies;
|
|
|
|
use App\Models\Note;
|
|
use App\Models\User;
|
|
use App\Support\AccessControl;
|
|
|
|
class NotePolicy
|
|
{
|
|
public function view(User $user, Note $note): bool
|
|
{
|
|
if (! AccessControl::canAccessEntity($user, $note->notable)) {
|
|
return false;
|
|
}
|
|
|
|
return $note->visibility !== 'private' || $note->user_id === $user->id || $user->hasRole('admin');
|
|
}
|
|
|
|
public function create(User $user, object $notable): bool
|
|
{
|
|
return $user->can('manage_call_notes') && AccessControl::canAccessEntity($user, $notable);
|
|
}
|
|
|
|
public function update(User $user, Note $note): bool
|
|
{
|
|
if (! $user->can('manage_call_notes') || ! $this->view($user, $note)) {
|
|
return false;
|
|
}
|
|
|
|
return $note->user_id === $user->id || $user->hasRole('supervisor') || $user->hasRole('admin');
|
|
}
|
|
|
|
public function delete(User $user, Note $note): bool
|
|
{
|
|
return $this->update($user, $note);
|
|
}
|
|
|
|
public function pin(User $user, Note $note): bool
|
|
{
|
|
return $user->can('pin_call_notes') && $this->view($user, $note);
|
|
}
|
|
}
|