基于RABC的权限控制设计
知道权限设计容易但是要有较好的扩展性需要费一番功夫的。提出现实问题一个部门有100人需要给100人以相同的角色经理单独给某个员工增加一个权限但整个部门权限其他人不变两个按钮可能调用相同的URL怎么进行控制资源对象需要根据开发和线上环境进行分组研发可以操作研发组的机器运维可以操作线上组机器给某个研发临时加一个机器权限用于核查问题其他人权限不变最终模型为特殊点1. 用户和角色直接关联用户的角色来自于用户组直接的角色赋予2. 角色管理的机器同样来自资源组直接管理的机器3. 按钮和URL没有对应关系可以相互交换设计sql脚本mysql版本-- 创建用户表 CREATE TABLE IF NOT EXISTS sys_user ( id bigint(20) NOT NULL COMMENT 主键ID, user_login_name VARCHAR(50) COMMENT 用户登录姓名不可以重复, user_real_name VARCHAR(50) COMMENT 用户正式姓名, password VARCHAR(100), phone VARCHAR(20) COMMENT 手机号码, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建用户组 CREATE TABLE IF NOT EXISTS sys_group ( id bigint(20) NOT NULL COMMENT 主键ID, group_name VARCHAR(50) COMMENT 群组名称, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建角色表 CREATE TABLE IF NOT EXISTS sys_role ( id bigint(20) NOT NULL COMMENT 主键ID, role_name VARCHAR(50) NOT NULL COMMENT 角色名称, role_type VARCHAR(20) NOT NULL DEFAULT 1 COMMENT 角色类型系统内置角色不展示0为系统内置角色1为自定义角色, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建权限表 CREATE TABLE IF NOT EXISTS sys_permission ( id bigint(20) NOT NULL COMMENT 主键ID, permission_key VARCHAR(50) NOT NULL COMMENT 角色KEY, permission_type VARCHAR(20) NOT NULL COMMENT 权限类型取值enum菜单 button按钮 url就是URL, tenant_id bigint(20) NOT NULL DEFAULT 0 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建用户和用户组关系表 CREATE TABLE IF NOT EXISTS sys_user_group ( id bigint(20) NOT NULL COMMENT 主键ID, user_id bigint(20) NOT NULL COMMENT 用户ID, user_real_name VARCHAR(50) COMMENT 用户正式姓名, group_id bigint(20) NOT NULL COMMENT 用户组ID, group_name VARCHAR(50) COMMENT 群组名称, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建用户和角色的关系 CREATE TABLE IF NOT EXISTS sys_user_role ( id bigint(20) NOT NULL COMMENT 主键ID, user_id bigint(20) NOT NULL COMMENT 用户ID, user_real_name VARCHAR(50) COMMENT 用户正式姓名, role_id bigint(20) NOT NULL COMMENT 角色ID, role_name VARCHAR(50) COMMENT 角色名称, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建用户组和角色的关系 CREATE TABLE IF NOT EXISTS sys_group_role ( id bigint(20) NOT NULL COMMENT 主键ID, group_id bigint(20) NOT NULL COMMENT 用户组ID, group_name VARCHAR(50) COMMENT 群组名称, role_id bigint(20) NOT NULL COMMENT 角色ID, role_name VARCHAR(50) COMMENT 角色名称, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建用户组和角色的关系 CREATE TABLE IF NOT EXISTS sys_role_permission ( id bigint(20) NOT NULL COMMENT 主键ID, role_id bigint(20) NOT NULL COMMENT 角色ID, role_name VARCHAR(50) COMMENT 角色名称, permission_key bigint(20) NOT NULL COMMENT 权限ID, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建Linux资源表 CREATE TABLE IF NOT EXISTS linux_resource ( id bigint(20) NOT NULL COMMENT 主键ID, resource_name VARCHAR(255) COMMENT 资源名称, ip_address VARCHAR(50), username VARCHAR(255), password VARCHAR(255), description TEXT COMMENT 描述信息, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建资源组表 CREATE TABLE IF NOT EXISTS resource_group ( id bigint(20) NOT NULL COMMENT 主键ID, resource_group_name VARCHAR(255) NOT NULL COMMENT 资源组名称, description TEXT COMMENT 描述信息, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建角色和资源的关系 CREATE TABLE IF NOT EXISTS sys_role_resource ( id bigint(20) NOT NULL COMMENT 主键ID, role_id bigint(20) NOT NULL COMMENT 角色ID, role_name VARCHAR(50) COMMENT 角色名称, resource_id bigint(20) NOT NULL COMMENT 资源ID, resource_name VARCHAR(255) COMMENT 资源名称, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE ); -- 创建角色和资源的关系 CREATE TABLE IF NOT EXISTS sys_role_resource_group ( id bigint(20) NOT NULL COMMENT 主键ID, role_id bigint(20) NOT NULL COMMENT 角色ID, role_name VARCHAR(50) COMMENT 角色名称, resource_group_id bigint(20) NOT NULL COMMENT 资源ID, resource_group_name VARCHAR(255) COMMENT 资源名称, tenant_id bigint(20) NOT NULL DEFAULT 10000 COMMENT 租户ID,1000为演示租户,0为内置数据, create_by varchar(255) DEFAULT NULL COMMENT 创建人, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 创建时间, update_by varchar(255) DEFAULT NULL COMMENT 更新人, update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT 更新时间, remark varchar(255) DEFAULT NULL COMMENT 备注, is_deleted tinyint(1) DEFAULT 0 COMMENT 是否删除0为否1为是, PRIMARY KEY (id) USING BTREE );Sql设计点✅保留关联表中增加角色名称用户名称等所有冗余名称运维查表一目了然✅ 表ID无自增主键全部雪花 ID迁移数据超级方便也可以进行hash分表✅无唯一索引无 DB 强校验业务层控制为多租户做准备不影响insert性能✅支持 用户 - 用户组 - 角色 - 权限 - 资源完整模型✅支持单独给某一个人加特殊权限现实中的痛点✅ 支持逻辑删除而非硬删除吐槽AI CodingTraeCN这些设计点AI就搞不出来还需要自己调整。但用这个sql生成Mapper和Service是相当容易的。这就让VibeCoding 做企业级的软件不合适辅助开发还是可以提升效率的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2433542.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!