Files
lotteryLaravel/app/Models/AdminRole.php

72 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Support\Facades\DB;
use App\Support\AdminPermissionBridge;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
final class AdminRole extends Model
{
protected $table = 'admin_roles';
protected static function booted(): void
{
self::creating(function (AdminRole $role): void {
if (($role->code ?? '') === '' && is_string($role->slug) && $role->slug !== '') {
$role->code = $role->slug;
}
});
}
protected $fillable = [
'slug',
'name',
'code',
'description',
'status',
'is_system',
'sort_order',
];
/**
* @return BelongsToMany<AdminMenuAction, AdminRole>
*/
public function menuActions(): BelongsToMany
{
return $this->belongsToMany(
AdminMenuAction::class,
'admin_role_menu_actions',
'role_id',
'menu_action_id',
);
}
/** @return BelongsToMany<AdminUser, AdminRole> */
public function users(): BelongsToMany
{
return $this->belongsToMany(
AdminUser::class,
'admin_user_site_roles',
'role_id',
'admin_user_id',
)->withPivot(['site_id', 'granted_at']);
}
/**
* @return list<string>
*/
public function legacyPermissionSlugs(): array
{
$codes = DB::table('admin_role_menu_actions as rma')
->join('admin_menu_actions as ma', 'ma.id', '=', 'rma.menu_action_id')
->where('rma.role_id', $this->id)
->where('ma.status', 1)
->pluck('ma.permission_code')
->all();
return AdminPermissionBridge::legacySlugsGrantedByMenuActionCodes($codes);
}
}