基于角色的访问控制模型通过用户表、角色表、权限表及关联表实现权限管理,支持灵活的权限校验与扩展。

1. 用户表(user)
存储系统用户的基本信息。
CREATE TABLE `user` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `email` VARCHAR(100), `status` TINYINT DEFAULT 1 COMMENT '1:正常, 0:禁用', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
2. 角色表(role)
定义系统中的角色,如管理员、普通用户、编辑等。
CREATE TABLE `role` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL UNIQUE COMMENT '如:admin, editor, viewer', `description` VARCHAR(255), `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP );
3. 权限表(permission)
定义具体的权限项,通常是操作级别的控制,比如“用户管理-查看”、“订单管理-删除”。
CREATE TABLE `permission` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `resource` VARCHAR(50) NOT NULL COMMENT '资源名,如 user, order', `action` VARCHAR(50) NOT NULL COMMENT '操作名,如 read, create, update, delete', `description` VARCHAR(255), UNIQUE KEY `uk_resource_action` (`resource`, `action`) );
4. 用户角色关联表(user_role)
实现用户与角色的多对多关系。
Modoer 是一款以本地分享,多功能的点评网站管理系统。采用 PHP+MYSQL 开发设计,开放全部源代码。因具有非凡的访问速度和卓越的负载能力而深受国内外朋友的喜爱,不局限于商铺类点评,真正实现了多类型的点评,可以让您的网站点评任何事与物,同时增加产品模块,也更好的网站产品在网站上展示。Modoer点评系统 2.5 Build 20110710更新列表1.同步 旗舰版系统框架2.增加 限制图片
CREATE TABLE `user_role` ( `user_id` BIGINT, `role_id` BIGINT, PRIMARY KEY (`user_id`, `role_id`), FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE, FOREIGN KEY (`role_id`) REFERENCES `role`(`id`) ON DELETE CASCADE );
5. 角色权限关联表(role_permission)
定义角色拥有哪些权限。
CREATE TABLE `role_permission` ( `role_id` BIGINT, `permission_id` BIGINT, PRIMARY KEY (`role_id`, `permission_id`), FOREIGN KEY (`role_id`) REFERENCES `role`(`id`) ON DELETE CASCADE, FOREIGN KEY (`permission_id`) REFERENCES `permission`(`id`) ON DELETE CASCADE );
权限校验逻辑说明
当用户请求某个接口或操作时,系统按以下流程判断是否有权限:
- 根据用户ID查询其所属的角色(通过 user_role 表)
- 根据角色查询对应的所有权限(通过 role_permission 和 permission 表)
- 检查当前请求的操作(如 resource='order', action='delete')是否在权限列表中
使用建议
- 权限粒度可根据业务需要调整,可以细化到菜单、按钮级别
- 可增加“数据权限”字段处理不同部门/组织的数据隔离
- 生产环境中 password 应使用强哈希算法(如bcrypt)加密存储
- 考虑加入日志表记录权限变更,便于审计









