This commit is contained in:
Dr Masroor Ehsan 2025-01-01 13:05:34 +06:00
parent c92967c6ca
commit a1d063b0dd
5 changed files with 24 additions and 6 deletions

View File

@ -12,7 +12,6 @@ class StudiesController extends HashidControllerBase
public function index()
{
$studies = UserStudyListerFactory::getLister()->all();
dd($studies);
return view('staff.studies.index', compact('studies'));
}

View File

@ -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 '#';

View File

@ -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);

View File

@ -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<UserFactory> */
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);
}
}

View File

@ -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);
}
}