User access dan user role dinamis

This commit is contained in:
2024-06-09 12:49:40 +07:00
parent 1eb6eb9cf3
commit fce657412e
23 changed files with 2686 additions and 27 deletions

View File

@@ -8,6 +8,10 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Support\Facades\DB;
class User extends Authenticatable
{
@@ -29,6 +33,7 @@ class User extends Authenticatable
'phone',
'otp',
'otp_created_at',
'role_id'
];
/**
@@ -53,13 +58,15 @@ class User extends Authenticatable
public $with = [
'metas',
'person'
'person',
'role',
];
public $appends = [
'meta',
'avatar_url',
'full_name'
'full_name',
'permissions'
];
public function getAvatarUrlAttribute()
@@ -82,6 +89,24 @@ class User extends Authenticatable
return (object) $orgMeta;
}
public function getPermissionsAttribute()
{
$roleId = $this->role_id;
if (!$roleId) {
return [];
}
// Ambil permissions dari role_has_permissions dan permissions tabel
$permissions = DB::table('role_has_permissions')
->join('permissions', 'role_has_permissions.permission_id', '=', 'permissions.id')
->where('role_has_permissions.role_id', $roleId)
->select('permissions.id', 'permissions.name', 'permissions.guard_name', 'permissions.path')
->get();
return $permissions;
}
public function managedCorporates()
{
return $this->belongsToMany(Corporate::class, 'corporate_manager', 'user_id', 'corporate_id');
@@ -97,7 +122,12 @@ class User extends Authenticatable
return $this->belongsTo(Person::class, 'person_id');
}
public function ownedPersons()
public function role()
{
return $this->belongsTo(Role::class, 'role_id');
}
public function ownedPersons()
{
return $this->hasMany(Person::class, 'owner_user_id');
}