diff --git a/app/Http/Controllers/Staff/StudiesController.php b/app/Http/Controllers/Staff/StudiesController.php index 54a594e..0f960ca 100644 --- a/app/Http/Controllers/Staff/StudiesController.php +++ b/app/Http/Controllers/Staff/StudiesController.php @@ -12,7 +12,6 @@ class StudiesController extends HashidControllerBase public function index() { $studies = UserStudyListerFactory::getLister()->all(); - dd($studies); return view('staff.studies.index', compact('studies')); } diff --git a/app/Models/Study.php b/app/Models/Study.php index c3c71d9..5b322b8 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -66,11 +66,11 @@ public function getHistoryLink(): string { $user = auth()->user(); if ($user->may(Permission::StudyHistoryEdit)) { - return route('staff.history.edit', _h($this->id)); + return route('staff.history.edit', $this->hash); } if ($user->may(Permission::StudyHistoryView)) { - return route('staff.history.view', _h($this->id)); + return route('staff.history.view', $this->hash); } return '#'; diff --git a/app/Models/StudyDetails.php b/app/Models/StudyDetails.php index 83e4ccc..486ff08 100644 --- a/app/Models/StudyDetails.php +++ b/app/Models/StudyDetails.php @@ -2,12 +2,15 @@ namespace App\Models; +use App\Models\Traits\HashableId; use Illuminate\Database\Eloquent\Relations\BelongsTo; class StudyDetails extends BaseModel { protected $table = 'study_details'; + use HashableId; + public function study(): BelongsTo { return $this->belongsTo(Study::class); diff --git a/app/Models/User.php b/app/Models/User.php index f8808d4..6906cea 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -5,6 +5,7 @@ // use Illuminate\Contracts\Auth\MustVerifyEmail; use App\Models\Enums\Permission; use App\Models\Enums\UserRole; +use App\Models\Traits\HashableId; use Database\Factories\UserFactory; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; @@ -21,6 +22,7 @@ class User extends Authenticatable /** @use HasFactory */ use HasFactory; + use HashableId; use HasProfilePhoto; use HasRoles; use Notifiable; @@ -90,11 +92,14 @@ public function scopeActive($query) public function isAdmin(): bool { - return $this->hasRole(UserRole::Admin); + return cache()->remember('user.is_admin:'.$this->id, + 5 * 60, + fn () => $this->hasRole(UserRole::Admin) + ); } - public function may(Permission $perm): bool + public function may(Permission|iterable|string $perm): bool { - return $this->hasRole(UserRole::Admin) || $this->can($perm); + return $this->isAdmin() || $this->can($perm); } } diff --git a/app/helpers.php b/app/helpers.php index 8a2d971..a366c9b 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -47,3 +47,14 @@ function user_per_page(?int $user_id = null): int return settings()->get("user.{$user_id}.pagination.per_page", config('app.pagination.per_page')); } } + +if (! function_exists('may')) { + function may(BackedEnum|iterable|string $perm): bool + { + if (auth()->user()->isAdmin()) { + return true; + } + + return auth()->user()->can($perm); + } +}