e148fca429b46aa8fb2dd00f9a54a510f1a8862e
## 主要改进 ### 1. 增强 createRuleGroup 函数 - ✅ 名称长度验证(1-100字符) - ✅ 编码格式验证(只允许字母、数字、连字符、下划线) - ✅ 编码长度验证(1-50字符) - ✅ 编码唯一性验证(查询数据库确保不重复) - ✅ 父级ID存在性验证(二级分组必须有有效的父级) - ✅ 三级分组防护(不允许在二级分组下创建子分组) - ✅ 数据库约束错误友好提示 ### 2. 增强 updateRuleGroup 函数 - ✅ ID有效性验证(检查分组是否存在) - ✅ 名称长度验证(1-100字符) - ✅ 编码格式验证(只允许字母、数字、连字符、下划线) - ✅ 编码长度验证(1-50字符) - ✅ 编码唯一性验证(排除自身) - ✅ **禁止修改pid**(防止分组层级混乱) - ✅ 数据库约束错误友好提示 - ✅ 提供清晰的错误消息 ### 3. 类型安全性改进 - ✅ 修复所有 TypeScript 类型错误 - ✅ 添加类型守卫防止 undefined 访问 - ✅ 确保所有返回值类型正确 ## 验证规则 ### 分组名称 - 必填,不能为空 - 长度:1-100字符 - 自动去除首尾空格 ### 分组编码 - 必填,不能为空 - 长度:1-50字符 - 格式:只允许字母、数字、连字符(-)、下划线(_) - 必须全局唯一 - 自动去除首尾空格 ### 父级ID - 一级分组:pid = null 或 '0' - 二级分组:pid = 有效的父级分组ID - 不允许三级分组 - **更新时不允许修改pid** ## 相关文件 - app/api/evaluation_points/rule-groups.ts ## 验收清单 - [x] TypeScript 类型检查通过 - [x] 完整的字段验证 - [x] 编码唯一性验证 - [x] 父级ID验证 - [x] 禁止修改pid - [x] 友好的错误提示 Co-Authored-By: Claude <noreply@anthropic.com>
智慧法务系统 - 权限认证系统
认证系统概述
本系统实现了一个简单的基于角色的权限认证系统,支持以下功能:
-
用户可以以不同角色登录系统:
common:普通用户,只能访问基本功能developer:开发者,可以访问所有功能,包括系统设置
-
权限控制:
- 根据用户角色显示或隐藏菜单项
- 防止通过URL直接访问未授权页面
技术实现
权限系统基于以下核心技术实现:
- Cookie会话存储:使用Remix的
createCookieSessionStorage创建基于Cookie的会话存储 - 角色权限控制:将用户角色存储在会话中,并在全局loader中检查访问权限
- 界面适配:根据用户角色动态过滤显示菜单项
使用方法
登录系统
- 访问登录页面(
/login) - 输入用户名和密码
- 选择用户角色:
- 普通用户:只能看到基础功能菜单
- 开发者:可以看到所有菜单,包括系统设置
权限验证
系统会自动执行以下权限验证:
- 未登录用户会被重定向到登录页面
- 普通用户试图访问系统设置等受限页面会被重定向到首页
- 侧边栏菜单会根据用户角色动态显示
关键文件
app/root.tsx:实现会话管理和全局权限检查app/components/layout/Sidebar.tsx:根据用户角色显示不同菜单app/routes/login.tsx:提供角色选择功能
进一步优化建议
- 实现真实的用户认证系统,如接入数据库验证用户
- 添加更细粒度的权限控制
- 实现用户角色和权限的管理界面
- 使用环境变量管理会话密钥等敏感信息
Welcome to Remix!
Development
Run the dev server:
npm run dev
Deployment
First, build your app for production:
npm run build
Then run the app in production mode:
npm start
Now you'll need to pick a host to deploy it to.
DIY
If you're familiar with deploying Node applications, the built-in Remix app server is production-ready.
Make sure to deploy the output of npm run build
build/serverbuild/client
Styling
This template comes with Tailwind CSS already configured for a simple default starting experience. You can use whatever css framework you prefer. See the Vite docs on css for more information.
Description
Languages
JavaScript
72.4%
TypeScript
23.8%
CSS
3.6%