refactor: [authz] 역할/권한 API 품질 개선

- Validator::make를 FormRequest로 분리 (6개 생성)
- 하드코딩 한글 문자열을 i18n 키로 교체
- RoleMenuPermission 데드코드 제거
- Role 모델 SpatieRole 상속으로 일원화
- 권한 변경 후 캐시 무효화 추가 (AccessService::bumpVersion)
- 미문서화 8개 Swagger 엔드포인트 추가
- 역할/권한 라우트에 perm.map+permission 미들웨어 추가
This commit is contained in:
김보곤
2026-02-20 21:59:26 +09:00
parent 555fd196f5
commit 1dd9057540
21 changed files with 1400 additions and 271 deletions

View File

@@ -8,13 +8,13 @@
use App\Models\Tenants\Tenant;
use App\Traits\Auditable;
use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Spatie\Permission\Models\Role as SpatieRole;
/**
* @mixin IdeHelperRole
*/
class Role extends Model
class Role extends SpatieRole
{
use Auditable, BelongsToTenant, SoftDeletes;
@@ -34,14 +34,6 @@ class Role extends Model
'tenant_id' => 'integer',
];
/**
* 관계: 메뉴 권한 (다대다)
*/
public function menuPermissions()
{
return $this->hasMany(RoleMenuPermission::class, 'role_id');
}
/**
* 관계: 테넌트
*/
@@ -71,19 +63,6 @@ public function users()
);
}
/**
* 관계: 권한 (role_has_permissions 테이블 통해)
*/
public function permissions()
{
return $this->belongsToMany(
Permission::class,
'role_has_permissions',
'role_id',
'permission_id'
);
}
/**
* 스코프: 공개된 역할만
*/

View File

@@ -1,27 +0,0 @@
<?php
namespace App\Models\Permissions;
use App\Models\Commons\IdeHelperRoleMenuPermission;
use App\Models\Commons\Menu;
use Illuminate\Database\Eloquent\Model;
/**
* @mixin IdeHelperRoleMenuPermission
*/
class RoleMenuPermission extends Model
{
protected $fillable = [
'role_id', 'menu_id', 'access', 'read', 'write', 'export', 'approve',
];
public function role()
{
return $this->belongsTo(Role::class, 'role_id');
}
public function menu()
{
return $this->belongsTo(Menu::class, 'menu_id');
}
}