You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.5 KiB
PHP
196 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Lib\Rs;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class SysPermissionController extends Controller
|
|
{
|
|
/**
|
|
* 获取权限列表
|
|
*/
|
|
public function list(Request $request)
|
|
{
|
|
$params = $request->all();
|
|
$page = $params['page'] ?? 1;
|
|
$pageSize = $params['page_size'] ?? 10;
|
|
$offset = ($page - 1) * $pageSize;
|
|
|
|
$query = DB::table('sys_permission')
|
|
->where('deleted', 0);
|
|
|
|
// 搜索条件
|
|
if (!empty($params['permission_name'])) {
|
|
$query->where('permission_name', 'like', '%' . $params['permission_name'] . '%');
|
|
}
|
|
if (!empty($params['permission_code'])) {
|
|
$query->where('permission_code', 'like', '%' . $params['permission_code'] . '%');
|
|
}
|
|
if (isset($params['type']) && $params['type'] !== '') {
|
|
$query->where('type', $params['type']);
|
|
}
|
|
if (isset($params['status']) && $params['status'] !== '') {
|
|
$query->where('status', $params['status']);
|
|
}
|
|
|
|
$total = $query->count();
|
|
$list = $query
|
|
->orderBy('sort', 'asc')
|
|
->orderBy('id', 'asc')
|
|
->offset($offset)
|
|
->limit($pageSize)
|
|
->get();
|
|
|
|
return Rs::success([
|
|
'list' => $list,
|
|
'total' => $total
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 保存权限
|
|
*/
|
|
public function Save(Request $request)
|
|
{
|
|
$data = $request->all();
|
|
|
|
// 验证必填字段
|
|
if (empty($data['permission_name'])) {
|
|
return Rs::error('权限名称不能为空');
|
|
}
|
|
if (empty($data['permission_code'])) {
|
|
return Rs::error('权限编码不能为空');
|
|
}
|
|
if (empty($data['type'])) {
|
|
return Rs::error('权限类型不能为空');
|
|
}
|
|
if (empty($data['parent_id'])) {
|
|
$data['parent_id']=0;
|
|
}
|
|
// 检查权限编码是否已存在
|
|
$exists = DB::table('sys_permission')
|
|
->where('permission_code', $data['permission_code'])
|
|
->where('deleted', 0);
|
|
|
|
if (isset($data['id']) && $data['id'] > 0) {
|
|
$exists->where('id', '<>', $data['id']);
|
|
}
|
|
|
|
if ($exists->exists()) {
|
|
return Rs::error('权限编码已存在');
|
|
}
|
|
|
|
try {
|
|
if (isset($data['id']) && $data['id'] > 0) {
|
|
// 更新
|
|
$id = $data['id'];
|
|
unset($data['id']);
|
|
$data['update_time'] = date('Y-m-d H:i:s');
|
|
DB::table('sys_permission')
|
|
->where('id', $id)
|
|
->update($data);
|
|
} else {
|
|
// 新增
|
|
$data['create_time'] = date('Y-m-d H:i:s');
|
|
$data['update_time'] = date('Y-m-d H:i:s');
|
|
$data['deleted'] = 0;
|
|
$id = DB::table('sys_permission')->insertGetId($data);
|
|
}
|
|
|
|
return Rs::success(['id' => $id]);
|
|
} catch (\Exception $e) {
|
|
return Rs::error('保存失败:' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除权限
|
|
*/
|
|
public function Delete(Request $request)
|
|
{
|
|
$id = $request->input('id');
|
|
if (empty($id)) {
|
|
return Rs::error('ID不能为空');
|
|
}
|
|
|
|
try {
|
|
// 检查是否有子权限
|
|
$hasChildren = DB::table('sys_permission')
|
|
->where('parent_id', $id)
|
|
->where('deleted', 0)
|
|
->exists();
|
|
|
|
if ($hasChildren) {
|
|
return Rs::error('该权限下存在子权限,无法删除');
|
|
}
|
|
|
|
// 软删除
|
|
DB::table('sys_permission')
|
|
->where('id', $id)
|
|
->update([
|
|
'deleted' => 1,
|
|
'update_time' => date('Y-m-d H:i:s')
|
|
]);
|
|
|
|
// 删除角色权限关联
|
|
DB::table('sys_role_permission')
|
|
->where('permission_id', $id)
|
|
->delete();
|
|
|
|
return Rs::success();
|
|
} catch (\Exception $e) {
|
|
return Rs::error('删除失败:' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取权限树
|
|
*/
|
|
public function getPermissionTree()
|
|
{
|
|
$permissions = DB::table('sys_permission')
|
|
->where('deleted', 0)
|
|
->orderBy('sort', 'asc')
|
|
->orderBy('id', 'asc')
|
|
->get();
|
|
|
|
$permissionTree = $this->buildPermissionTree($permissions);
|
|
return Rs::success($permissionTree);
|
|
}
|
|
|
|
/**
|
|
* 构建权限树
|
|
*/
|
|
private function buildPermissionTree($permissions, $parentId = 0)
|
|
{
|
|
$tree = [];
|
|
foreach ($permissions as $permission) {
|
|
if ($permission->parent_id == $parentId) {
|
|
$children = $this->buildPermissionTree($permissions, $permission->id);
|
|
if (!empty($children)) {
|
|
$permission->children = $children;
|
|
}
|
|
$tree[] = $permission;
|
|
}
|
|
}
|
|
return $tree;
|
|
}
|
|
|
|
/**
|
|
* 获取所有权限(不分页,用于角色绑定)
|
|
*/
|
|
public function getAllPermissions()
|
|
{
|
|
$permissions = DB::table('sys_permission')
|
|
->where('deleted', 0)
|
|
->orderBy('sort', 'asc')
|
|
->orderBy('id', 'asc')
|
|
->get();
|
|
|
|
return Rs::success($permissions);
|
|
}
|
|
}
|