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.
237 lines
6.0 KiB
PHP
237 lines
6.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Lib\Rs;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class SysRoleController extends Controller
|
|
{
|
|
/**
|
|
* 获取角色列表
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function list(Request $request)
|
|
{
|
|
// 获取查询参数
|
|
$roleName = $request->input('role_name', '');
|
|
$roleCode = $request->input('role_code', '');
|
|
$status = $request->input('status', null);
|
|
$page = $request->input('page', 1);
|
|
$pageSize = $request->input('page_size', 10);
|
|
|
|
// 构建查询
|
|
$query = DB::table('sys_role')
|
|
->where('deleted', 0);
|
|
|
|
// 添加查询条件
|
|
if (!empty($roleName)) {
|
|
$query->where('role_name', 'like', '%' . $roleName . '%');
|
|
}
|
|
|
|
if (!empty($roleCode)) {
|
|
$query->where('role_code', 'like', '%' . $roleCode . '%');
|
|
}
|
|
|
|
if ($status !== null) {
|
|
$query->where('status', $status);
|
|
}
|
|
|
|
// 计算总数
|
|
$total = $query->count();
|
|
|
|
// 分页查询
|
|
$roles = $query->orderBy('sort', 'asc')
|
|
->orderBy('id', 'asc')
|
|
->skip(($page - 1) * $pageSize)
|
|
->take($pageSize)
|
|
->get();
|
|
|
|
// 构造返回数据
|
|
$data = [
|
|
'list' => $roles,
|
|
'total' => $total,
|
|
'page' => $page,
|
|
'page_size' => $pageSize,
|
|
'total_pages' => ceil($total / $pageSize)
|
|
];
|
|
|
|
return Rs::success($data);
|
|
}
|
|
public function Save(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'id' => 'required|integer',
|
|
'role_name' => 'required|string|max:50',
|
|
'role_code' => [
|
|
'required',
|
|
'string',
|
|
'max:50',
|
|
Rule::unique('sys_role', 'role_code')->ignore($request->id, 'id'),
|
|
],
|
|
'status' => 'required|integer|in:0,1',
|
|
]);
|
|
|
|
$conditions = ['id' => $data['id']];
|
|
$values = [
|
|
'role_name' => $data['role_name'],
|
|
'role_code' => $data['role_code'],
|
|
'status' => $data['status'],
|
|
];
|
|
|
|
$updated = DB::table('sys_role')->updateOrInsert($conditions, $values);
|
|
|
|
if ($updated) {
|
|
return Rs::success();
|
|
}
|
|
|
|
return Rs::error('操作失败');
|
|
}
|
|
|
|
/**
|
|
* 删除角色
|
|
* @param Request $request
|
|
|
|
*/
|
|
public function Delete(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'id' => 'required|integer',
|
|
]);
|
|
|
|
$deleted = DB::table('sys_role')->where('id', $data['id'])->update(['deleted' => 1]);
|
|
|
|
if ($deleted) {
|
|
return Rs::success();
|
|
}
|
|
|
|
return Rs::error('删除失败');
|
|
}
|
|
|
|
/**
|
|
* 获取所有权限,用于角色权限分配
|
|
|
|
*/
|
|
public function getAllPermissions()
|
|
{
|
|
// 获取所有未删除的权限
|
|
$permissions = DB::table('sys_permission')
|
|
->where('deleted', 0)
|
|
->orderBy('sort', 'asc')
|
|
->get();
|
|
|
|
// 构建权限树
|
|
$permissionTree = $this->buildPermissionTree($permissions);
|
|
|
|
return Rs::success($permissionTree);
|
|
}
|
|
|
|
/**
|
|
* 获取所有启用的角色列表(用于用户绑定角色)
|
|
|
|
*/
|
|
public function getRoleList()
|
|
{
|
|
$roles = DB::table('sys_role')
|
|
->where('deleted', 0)
|
|
->where('status', 1)
|
|
->orderBy('sort', 'asc')
|
|
->get();
|
|
|
|
return Rs::success($roles);
|
|
}
|
|
|
|
/**
|
|
* 获取角色已有权限
|
|
* @param Request $request
|
|
|
|
*/
|
|
public function getRolePermissions(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'role_id' => 'required|integer',
|
|
]);
|
|
|
|
// 获取角色已有的权限ID列表
|
|
$permissionIds = DB::table('sys_role_permission')
|
|
->where('role_id', $data['role_id'])
|
|
->pluck('permission_id')
|
|
->toArray();
|
|
|
|
return Rs::success($permissionIds);
|
|
}
|
|
|
|
/**
|
|
* 保存角色权限
|
|
* @param Request $request
|
|
|
|
*/
|
|
public function saveRolePermissions(Request $request)
|
|
{
|
|
$data = $request->validate([
|
|
'role_id' => 'required|integer',
|
|
'permission_ids' => 'required|array',
|
|
]);
|
|
|
|
// 开启事务
|
|
DB::beginTransaction();
|
|
|
|
try {
|
|
// 删除角色原有权限
|
|
DB::table('sys_role_permission')
|
|
->where('role_id', $data['role_id'])
|
|
->delete();
|
|
|
|
// 添加新的权限关联
|
|
$insertData = [];
|
|
foreach ($data['permission_ids'] as $permissionId) {
|
|
$insertData[] = [
|
|
'role_id' => $data['role_id'],
|
|
'permission_id' => $permissionId,
|
|
'create_time' => now(),
|
|
];
|
|
}
|
|
|
|
if (!empty($insertData)) {
|
|
DB::table('sys_role_permission')->insert($insertData);
|
|
}
|
|
|
|
// 提交事务
|
|
DB::commit();
|
|
|
|
return Rs::success();
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
DB::rollBack();
|
|
return Rs::error('保存权限失败:' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 构建权限树
|
|
* @param $permissions
|
|
* @param int $parentId
|
|
* @return array
|
|
*/
|
|
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;
|
|
}
|
|
}
|