通过创建一个小程序表,添加字段admin_id,
admin添加两个管理员,权限都为超级管理员的下级管理员。
新建小程序数据,分别为用户名admin 和 admin2各添加了两个小程序
数据限制模式为auth,则admin和admin2可以互相看到对方同级数据,并不是只看到自己的和下级的。
数据限制模式为personal,则admin和admin2只可以看到自己
crud类里面的auth限制里面为获取权限范围内所有管理员ID
AppletController
/**
* 开启auth数据限制
* @var string
*/
protected $dataLimit = 'personal';
/**
* 以admin_id为数据限制字段
* @var string
*/
protected $dataLimitField = 'admin_id';
CRUD
/**
* 查询前置
* @param Request $request
* @return array
* @throws BusinessException
*/
protected function selectInput(Request $request): array
{
$field = $request->get('field');
$order = $request->get('order', 'asc');
$format = $request->get('format', 'normal');
$limit = (int)$request->get('limit', $format === 'tree' ? 1000 : 10);
$limit = $limit <= 0 ? 10 : $limit;
$order = $order === 'asc' ? 'asc' : 'desc';
$where = $request->get();
$page = (int)$request->get('page');
$page = $page > 0 ? $page : 1;
$table = config('plugin.admin.database.connections.mysql.prefix') . $this->model->getTable();
$allow_column = Util::db()->select("desc `$table`");
if (!$allow_column) {
throw new BusinessException('表不存在');
}
$allow_column = array_column($allow_column, 'Field', 'Field');
if (!in_array($field, $allow_column)) {
$field = null;
}
foreach ($where as $column => $value) {
if (
$value === '' || !isset($allow_column[$column]) ||
is_array($value) && (empty($value) || !in_array($value[0], ['null', 'not null']) && !isset($value[1]))
) {
unset($where[$column]);
}
}
// 按照数据限制字段返回数据
if ($this->dataLimit === 'personal') {
$where[$this->dataLimitField] = admin_id();
} elseif ($this->dataLimit === 'auth') {
$primary_key = $this->model->getKeyName();
if (!Auth::isSupperAdmin() && (!isset($where[$primary_key]) || $this->dataLimitField != $primary_key)) {
$where[$this->dataLimitField] = ['in', Auth::getScopeAdminIds(true)];
}
}
return [$where, $format, $limit, $field, $order, $page];
}
修改数据限制模式 无痕窗口登陆 两个管理员账号
Mac系统 环境为PHP8.2.10
如果是超级管理员就返回所有的,不是就只返回自己的。
权限这块没做判断。
// 按照数据限制字段返回数据
if ($this->dataLimit === 'personal') {
$where[$this->dataLimitField] = admin_id();
} elseif ($this->dataLimit === 'auth') {
if (Auth::isSupperAdmin()) {
$where[$this->dataLimitField] = ['in', Auth::getScopeAdminIds(true)];
} else {
$where[$this->dataLimitField] = admin_id();
}
// $primary_key = $this->model->getKeyName();
// if (!Auth::isSupperAdmin() && (!isset($where[$primary_key]) || $this->dataLimitField != $primary_key)) {
// $where[$this->dataLimitField] = ['in', Auth::getScopeAdminIds(true)];
// }
}
return [$where, $format, $limit, $field, $order, $page];
感谢反馈,admin后台插件管理里升级下admin试下
响应速度是真快啊大哥,刚反馈没多久就更新了!