- 移除冗余的 viewAny 权限,统一使用 view 权限 - 简化权限描述,去掉「列表」和「详情」的区分 - 权限数量从 45 个精简到 32 个 - 更新 RolePolicy 使用统一的 role.view 权限 - 创建迁移脚本自动更新现有权限并合并关联 - 验证所有角色权限分配正确(super-admin: 32, admin: 28, user: 6)
73 lines
1.3 KiB
PHP
73 lines
1.3 KiB
PHP
<?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.view');
|
|
}
|
|
|
|
/**
|
|
* 查看角色详情
|
|
*/
|
|
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');
|
|
}
|
|
}
|