feat(权限): 创建角色管理资源(RoleResource)
- 创建 RoleResource 及其所有页面类 - 实现角色列表、创建、编辑、查看功能 - 权限选择器按模块分组显示,支持批量选择 - 实现 super-admin 角色保护(不可编辑和删除) - 实现角色删除前检查(有关联用户时不可删除) - 创建 RolePolicy 控制角色管理权限 - 在 AppServiceProvider 中注册 RolePolicy - 角色列表显示权限数量和用户数量 - 完整的中文界面和提示信息
This commit is contained in:
72
app/Policies/RolePolicy.php
Normal file
72
app/Policies/RolePolicy.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
use App\Models\User;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class RolePolicy
|
||||
{
|
||||
/**
|
||||
* 查看角色列表
|
||||
*/
|
||||
public function viewAny(User $user): bool
|
||||
{
|
||||
return $user->can('role.viewAny');
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看角色详情
|
||||
*/
|
||||
public function view(User $user, Role $role): bool
|
||||
{
|
||||
return $user->can('role.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建角色
|
||||
*/
|
||||
public function create(User $user): bool
|
||||
{
|
||||
return $user->can('role.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑角色
|
||||
*/
|
||||
public function update(User $user, Role $role): bool
|
||||
{
|
||||
// super-admin 角色不能被编辑
|
||||
if ($role->name === 'super-admin') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $user->can('role.update');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
*/
|
||||
public function delete(User $user, Role $role): bool
|
||||
{
|
||||
// super-admin 角色不能被删除
|
||||
if ($role->name === 'super-admin') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查是否有关联用户
|
||||
if ($role->users()->count() > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $user->can('role.delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除角色
|
||||
*/
|
||||
public function deleteAny(User $user): bool
|
||||
{
|
||||
return $user->can('role.delete');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user