优化管理员日志管理只显示当前组以及以下的数据
This commit is contained in:
@@ -17,8 +17,6 @@ use Webman\Http\Request;
|
||||
|
||||
class Group extends Backend
|
||||
{
|
||||
protected string $authMethod = 'allAuthAndOthers';
|
||||
|
||||
protected ?object $model = null;
|
||||
|
||||
protected string|array $preExcludeFields = ['create_time', 'update_time'];
|
||||
@@ -82,6 +80,9 @@ class Group extends Backend
|
||||
$rulesRes = $this->handleRules($data);
|
||||
if ($rulesRes instanceof Response) return $rulesRes;
|
||||
|
||||
$pidRes = $this->validateGroupParentId($data['pid'] ?? null);
|
||||
if ($pidRes instanceof Response) return $pidRes;
|
||||
|
||||
$result = false;
|
||||
$this->model->startTrans();
|
||||
try {
|
||||
@@ -144,6 +145,11 @@ class Group extends Backend
|
||||
$rulesRes = $this->handleRules($data);
|
||||
if ($rulesRes instanceof Response) return $rulesRes;
|
||||
|
||||
if (array_key_exists('pid', $data)) {
|
||||
$pidRes = $this->validateGroupParentId($data['pid'] ?? null);
|
||||
if ($pidRes instanceof Response) return $pidRes;
|
||||
}
|
||||
|
||||
$result = false;
|
||||
$this->model->startTrans();
|
||||
try {
|
||||
@@ -294,8 +300,6 @@ class Group extends Backend
|
||||
$pk = $this->model->getPk();
|
||||
$initKey = $request->get('initKey') ?? $pk;
|
||||
|
||||
$absoluteAuth = $request->get('absoluteAuth') ?? false;
|
||||
|
||||
if ($this->keyword) {
|
||||
$keyword = explode(' ', $this->keyword);
|
||||
foreach ($keyword as $item) {
|
||||
@@ -308,11 +312,14 @@ class Group extends Backend
|
||||
}
|
||||
|
||||
if (!$this->auth->isSuperAdmin()) {
|
||||
$authGroups = $this->auth->getAllAuthGroups($this->authMethod, $where);
|
||||
if (!$absoluteAuth) {
|
||||
$authGroups = array_merge($this->adminGroups, $authGroups);
|
||||
$descendantIds = $this->auth->getAdminChildGroups();
|
||||
// 本人所在组 + 树形下级;不含同级、不含其它分支(与 getAllAuthGroups 的「权限多寡」脱钩)
|
||||
$visibleIds = array_values(array_unique(array_merge($this->adminGroups, $descendantIds)));
|
||||
if ($visibleIds === []) {
|
||||
$where[] = ['id', '=', -1];
|
||||
} else {
|
||||
$where[] = ['id', 'in', $visibleIds];
|
||||
}
|
||||
$where[] = ['id', 'in', $authGroups];
|
||||
}
|
||||
$data = $this->model->where($where)->select()->toArray();
|
||||
|
||||
@@ -337,9 +344,43 @@ class Group extends Backend
|
||||
|
||||
private function checkAuth($groupId): ?Response
|
||||
{
|
||||
$authGroups = $this->auth->getAllAuthGroups($this->authMethod, []);
|
||||
if (!$this->auth->isSuperAdmin() && !in_array($groupId, $authGroups)) {
|
||||
return $this->error(__($this->authMethod == 'allAuth' ? 'You need to have all permissions of this group to operate this group~' : 'You need to have all the permissions of the group and have additional permissions before you can operate the group~'));
|
||||
if ($this->auth->isSuperAdmin()) {
|
||||
return null;
|
||||
}
|
||||
$descendantIds = $this->auth->getAdminChildGroups();
|
||||
if (!in_array($groupId, $descendantIds, false)) {
|
||||
return $this->error(__('You can only operate subordinate role groups in the tree hierarchy~'));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增/编辑时校验父级:非超管只能挂在本人所在组或其树形下级之下,不可建顶级(pid=0)
|
||||
*/
|
||||
private function validateGroupParentId(mixed $pid): ?Response
|
||||
{
|
||||
if ($this->auth->isSuperAdmin()) {
|
||||
return null;
|
||||
}
|
||||
if ($pid === null || $pid === '' || $pid === false) {
|
||||
return $this->error(__('Non super administrators cannot create top-level role groups'));
|
||||
}
|
||||
if ($pid === 0 || $pid === '0') {
|
||||
return $this->error(__('Non super administrators cannot create top-level role groups'));
|
||||
}
|
||||
if (!is_numeric($pid)) {
|
||||
return $this->error(__('The parent group is not within your manageable scope'));
|
||||
}
|
||||
$allowed = array_values(array_unique(array_merge($this->adminGroups, $this->auth->getAdminChildGroups())));
|
||||
$ok = false;
|
||||
foreach ($allowed as $aid) {
|
||||
if ($aid == $pid) {
|
||||
$ok = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$ok) {
|
||||
return $this->error(__('The parent group is not within your manageable scope'));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user