# 任务005:权限系统 ## 目标 实现RBAC权限控制,精确到按钮级别。 ## 权限模型 ### 角色 - **总管理员** — 全部权限,管理所有组织/项目/设备 - **企业管理员** — 只能管理自己组织下的项目/设备/人员 - **普通用户** — 根据配置查看/操作特定组织/项目/设备 ### 权限粒度 - **组织级** — 用户可看/操作整个组织下所有设备 - **项目级** — 用户只能看/操作某项目下的设备 - **设备级** — 用户只能看/操作某一台柜子 ### 权限类型 - `view` — 查看 - `operate` — 操作(控制设备) ## 数据库表 ```sql -- 角色表 CREATE TABLE roles ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL UNIQUE, description VARCHAR(200), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 权限表 CREATE TABLE permissions ( id BIGINT AUTO_INCREMENT PRIMARY KEY, code VARCHAR(50) NOT NULL UNIQUE COMMENT '权限码,如device:view', name VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 角色权限关联表 CREATE TABLE role_permissions ( role_id BIGINT NOT NULL, permission_id BIGINT NOT NULL, PRIMARY KEY (role_id, permission_id), FOREIGN KEY (role_id) REFERENCES roles(id), FOREIGN KEY (permission_id) REFERENCES permissions(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 用户角色关联表 CREATE TABLE user_roles ( user_id BIGINT NOT NULL, role_id BIGINT NOT NULL, PRIMARY KEY (user_id, role_id), FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (role_id) REFERENCES roles(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 用户权限范围表(组织/项目/设备级) CREATE TABLE user_scopes ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, scope_type TINYINT NOT NULL COMMENT '1组织 2项目 3设备', scope_id BIGINT NOT NULL, permission_type TINYINT NOT NULL COMMENT '1查看 2操作', FOREIGN KEY (user_id) REFERENCES users(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` ## 后端API ### 角色管理 ``` GET /api/roles # 角色列表 POST /api/roles # 创建角色 PUT /api/roles/:id # 更新角色 DELETE /api/roles/:id # 删除角色 PUT /api/roles/:id/permissions # 设置角色权限 ``` ### 用户权限 ``` GET /api/users/:id/permissions # 获取用户权限 PUT /api/users/:id/roles # 设置用户角色 PUT /api/users/:id/scopes # 设置用户权限范围 ``` ### 权限校验中间件 ```rust // 路由级别权限校验 #[middleware] fn require_permission(permission: &str) { // 1. 从token获取用户ID // 2. 查询用户角色和权限 // 3. 校验权限范围(组织/项目/设备) // 4. 无权限返回403 } ``` ## 前端组件 ### 权限组件 ```tsx // 按钮级权限控制 // 页面级权限控制 ``` ### 角色管理页 - 角色列表 - 创建/编辑角色 - 权限树勾选(按模块分组) ### 用户权限配置 - 选择角色 - 配置权限范围(组织/项目/设备) - 选择权限类型(查看/操作) ## 权限码列表 ``` # 设备管理 device:view # 查看设备 device:operate # 操作设备 device:create # 添加设备 device:delete # 删除设备 # 充电控制 charge:start # 开始充电 charge:stop # 停止充电 charge:open_door # 开门 # 充电记录 charge_record:view # 查看充电记录 charge_record:export # 导出充电记录 # 设备日志 device_log:view # 查看设备日志 # 能耗管理 energy:view # 查看能耗 energy:export # 导出能耗 # 系统设置 user:view # 查看用户 user:create # 创建用户 user:edit # 编辑用户 user:delete # 删除用户 role:view # 查看角色 role:create # 创建角色 role:edit # 编辑角色 role:delete # 删除角色 operation_log:view # 查看操作日志 ``` ## 质量约束 1. 完成代码后执行 `cargo check` + `tsc --noEmit`,零报错零警告 2. 分层拆分,单函数≤80行,命名语义化,完整注释 3. 所有外部IO/网络请求异常捕获,禁止裸panic 4. 分支逻辑全覆盖,不遗漏兜底分支 5. 常量抽离,不使用废弃API 6. Rust内存安全,React函数组件+Hooks 7. 权限校验必须覆盖所有API接口