f938ca6c00
添加角色基于访问控制(RBAC)相关接口: 1. API 代理路由 - api.v3.rbac.roles._index.tsx: 角色列表和创建 - api.v3.rbac.roles.$roleId.tsx: 角色详情、更新和删除 - api.v3.rbac.roles.$roleId.users.tsx: 角色用户关联管理 - api.v3.rbac.users.$userId.roles.tsx: 用户角色列表 - api.v3.rbac.users.$userId.roles.$roleId.tsx: 用户角色分配 2. 模拟数据服务 - rbac-mock-data.server.ts: 提供模拟角色和用户角色数据 - 支持 CRUD 操作 - 包含预置的系统管理员、开发者等角色 接口功能: - ✅ 获取角色列表(支持分页和搜索) - ✅ 获取角色详情 - ✅ 创建、更新、删除角色 - ✅ 获取角色的用户列表 - ✅ 为用户分配/移除角色 注:当前使用模拟数据,待后端接口完善后切换到真实 API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
/**
|
|
* RBAC API 代理 - 用户角色管理
|
|
* POST /api/v3/rbac/users/:userId/roles - 为用户分配角色
|
|
*/
|
|
|
|
import { json, type LoaderFunctionArgs } from "@remix-run/node";
|
|
import { assignUserRole } from "~/services/rbac-mock-data.server";
|
|
|
|
// POST - 为用户分配角色
|
|
export async function action({ request, params }: LoaderFunctionArgs) {
|
|
const userId = parseInt(params.userId || '0');
|
|
const method = request.method;
|
|
|
|
console.log('📡 [API Route]', method, '/api/v3/rbac/users/' + userId + '/roles');
|
|
|
|
if (method === 'POST') {
|
|
const body = await request.json();
|
|
const roleIds = body.role_ids || [];
|
|
|
|
console.log('📋 [API Route] 分配角色:', { userId, roleIds });
|
|
|
|
// 使用共享Mock数据分配角色
|
|
roleIds.forEach((roleId: number) => {
|
|
assignUserRole(userId, roleId);
|
|
});
|
|
|
|
return json({
|
|
code: 200,
|
|
message: '角色分配成功',
|
|
data: {
|
|
user_id: userId,
|
|
roles: roleIds.map((id: number) => ({ role_id: id }))
|
|
}
|
|
});
|
|
}
|
|
|
|
return json({ code: 405, message: 'Method Not Allowed' }, { status: 405 });
|
|
}
|