feat(权限): 完善所有策略的权限检查

- 更新 DocumentPolicy 添加权限检查
  - viewAny/view/create/update/delete/download 都检查相应权限
  - 保留现有的分组访问控制逻辑
  - 保留安全日志记录功能
- 更新 TerminalPolicy 添加权限检查
  - 所有方法都基于 terminal.* 权限
  - 新增 sync 方法用于配置同步权限检查
- 更新 SopTemplatePolicy 添加权限检查
  - 所有方法都基于 sop-template.* 权限
  - 保留现有的状态检查逻辑(已发布不可编辑/删除)
- 创建 SystemSettingPolicy
  - 实现 viewAny/view/update 权限检查
- 创建 ActivityLogPolicy
  - 实现 viewAny/view/export 权限检查
- 创建 GroupPolicy
  - 实现完整的 CRUD 权限检查
  - 删除前检查关联文档和用户
- 在 AppServiceProvider 中注册所有策略
This commit is contained in:
2026-03-11 10:08:22 +08:00
parent c2b83e7857
commit 386fe42f76
7 changed files with 249 additions and 39 deletions

View File

@@ -15,8 +15,7 @@ class TerminalPolicy
*/
public function viewAny(User $user): bool
{
// 所有已认证用户都可以查看终端列表
return true;
return $user->can('terminal.view');
}
/**
@@ -28,8 +27,7 @@ class TerminalPolicy
*/
public function view(User $user, Terminal $terminal): bool
{
// 所有已认证用户都可以查看终端详情
return true;
return $user->can('terminal.view');
}
/**
@@ -40,8 +38,7 @@ class TerminalPolicy
*/
public function create(User $user): bool
{
// 所有已认证用户都可以创建终端
return true;
return $user->can('terminal.create');
}
/**
@@ -53,8 +50,7 @@ class TerminalPolicy
*/
public function update(User $user, Terminal $terminal): bool
{
// 所有已认证用户都可以更新终端
return true;
return $user->can('terminal.update');
}
/**
@@ -66,8 +62,19 @@ class TerminalPolicy
*/
public function delete(User $user, Terminal $terminal): bool
{
// 所有已认证用户都可以删除终端
return true;
return $user->can('terminal.delete');
}
/**
* 判断用户是否可以同步终端配置
*
* @param User $user
* @param Terminal $terminal
* @return bool
*/
public function sync(User $user, Terminal $terminal): bool
{
return $user->can('terminal.sync');
}
/**
@@ -79,8 +86,7 @@ class TerminalPolicy
*/
public function restore(User $user, Terminal $terminal): bool
{
// 所有已认证用户都可以恢复终端
return true;
return $user->can('terminal.delete');
}
/**
@@ -92,7 +98,6 @@ class TerminalPolicy
*/
public function forceDelete(User $user, Terminal $terminal): bool
{
// 所有已认证用户都可以永久删除终端
return true;
return $user->can('terminal.delete');
}
}