当前位置: 首页 > article >正文

goframe开发一个企业网站 权限设计1

基于RBAC的权限管理系统设计

1. 引言

在现代应用程序开发中,权限管理是一个至关重要的组成部分。本文将介绍一个基于角色的访问控制(Role-Based Access Control,RBAC)系统的初期数据库设计,该设计旨在为各种类型的应用提供灵活而强大的权限管理解决方案。

需要注意的是,这是一个初步设计,随着项目的发展和需求的变化,字段和表结构可能需要进行调整和优化。

2. 系统概述

我们的RBAC系统主要包含以下几个核心概念:

  • 用户(User):系统的使用者,可以是学生、教师、管理员等。
  • 角色(Role):用户在系统中的身份,如学生、教师、教学管理员、系统管理员等。
  • 权限(Permission):用户可以执行的操作。
  • 菜单(Menu):系统的功能模块,与权限相关联。

3. 初期数据库设计

以下是初步的数据库设计,后续可能需要根据实际需求进行调整:

3.1 用户表(user)

用户表存储了系统中所有用户的基本信息。

字段名类型说明
idINT用户ID,自增主键
usernameVARCHAR(50)用户名,唯一
passwordVARCHAR(255)密码,建议使用加密存储
emailVARCHAR(100)用户邮箱
created_atTIMESTAMP创建时间
updated_atTIMESTAMP最后更新时间

3.2 角色表(role)

角色表定义了系统中的各种角色。

字段名类型说明
idINT角色ID,自增主键
nameVARCHAR(50)角色名称,唯一
descriptionVARCHAR(255)角色描述
created_atTIMESTAMP创建时间
updated_atTIMESTAMP最后更新时间

3.3 用户角色关联表(user_role)

此表建立了用户和角色之间的多对多关系。

字段名类型说明
user_idINT用户ID,关联user表的id
role_idINT角色ID,关联role表的id

3.4 菜单表(menu)

菜单表存储了系统的功能模块信息。

字段名类型说明
idINT菜单ID,自增主键
nameVARCHAR(50)菜单名称
urlVARCHAR(255)菜单URL
parent_idINT父菜单ID,用于构建菜单层级
order_numINT菜单顺序
iconVARCHAR(50)菜单图标
created_atTIMESTAMP创建时间
updated_atTIMESTAMP最后更新时间

3.5 权限表(permission)

权限表定义了系统中的各种操作权限。

字段名类型说明
idINT权限ID,自增主键
nameVARCHAR(50)权限名称,唯一
descriptionVARCHAR(255)权限描述
menu_idINT关联的菜单ID
created_atTIMESTAMP创建时间
updated_atTIMESTAMP最后更新时间

3.6 角色权限关联表(role_permission)

此表建立了角色和权限之间的多对多关系。

字段名类型说明
role_idINT角色ID,关联role表的id
permission_idINT权限ID,关联permission表的id

4. 系统功能实现

4.1 用户权限分配

管理员可以通过以下步骤为用户分配权限:

  1. 在role表中创建或选择适当的角色。
  2. 在role_permission表中为该角色分配相应的权限。
  3. 在user_role表中将用户与角色关联。

4.2 权限验证

在进行用户认证时,系统可以通过以下步骤获取用户的权限数据:

  1. 根据用户ID从user_role表中获取该用户的所有角色。
  2. 根据获取到的角色ID,从role_permission表中获取这些角色所拥有的所有权限ID。
  3. 根据权限ID从permission表中获取具体的权限信息。

5. 未来可能的调整

随着项目的发展,可能需要考虑以下方面的调整:

  1. 添加更多的用户信息字段,如姓名、电话、状态等。
  2. 增加权限的粒度,可能需要添加资源表和操作表。
  3. 考虑添加部门或组织结构相关的表,以支持更复杂的权限管理需求。
  4. 优化查询性能,可能需要添加适当的索引或引入缓存机制。
  5. 根据业务需求,可能需要添加日志表来记录权限变更历史。
  6. 考虑数据安全性,可能需要对敏感信息进行加密存储。

6. mysql 语

-- 用户表
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID,自增主键',
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名,唯一',
    password VARCHAR(255) NOT NULL COMMENT '密码,建议使用加密存储',
    email VARCHAR(100) COMMENT '用户邮箱',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间'
) COMMENT '存储系统用户信息';

-- 角色表
CREATE TABLE role (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID,自增主键',
    name VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称,唯一',
    description VARCHAR(255) COMMENT '角色描述',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间'
) COMMENT '存储系统角色信息';

-- 用户角色关联表
CREATE TABLE user_role (
    user_id INT COMMENT '用户ID,关联user表的id',
    role_id INT COMMENT '角色ID,关联role表的id',
    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
) COMMENT '用户和角色的多对多关联表';

-- 菜单表
CREATE TABLE menu (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '菜单ID,自增主键',
    name VARCHAR(50) NOT NULL COMMENT '菜单名称',
    url VARCHAR(255) COMMENT '菜单URL',
    parent_id INT COMMENT '父菜单ID,用于构建菜单层级',
    order_num INT COMMENT '菜单顺序',
    icon VARCHAR(50) COMMENT '菜单图标',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
    FOREIGN KEY (parent_id) REFERENCES menu(id) ON DELETE SET NULL
) COMMENT '存储系统菜单信息';

-- 权限表
CREATE TABLE permission (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '权限ID,自增主键',
    name VARCHAR(50) NOT NULL UNIQUE COMMENT '权限名称,唯一',
    description VARCHAR(255) COMMENT '权限描述',
    menu_id INT COMMENT '关联的菜单ID',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
    FOREIGN KEY (menu_id) REFERENCES menu(id) ON DELETE SET NULL
) COMMENT '存储系统权限信息';

-- 角色权限关联表
CREATE TABLE role_permission (
    role_id INT COMMENT '角色ID,关联role表的id',
    permission_id INT COMMENT '权限ID,关联permission表的id',
    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
) COMMENT '角色和权限的多对多关联表';

CREATE TABLE `web_user`
(
    `id`         int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `nickname`   varchar(20) COLLATE utf8mb4_general_ci  NOT NULL COMMENT '昵称',
    `username`   varchar(10) COLLATE utf8mb4_general_ci  NOT NULL COMMENT '用户名',
    `password`   varchar(32) COLLATE utf8mb4_general_ci  NOT NULL COMMENT '密码',
    `avatar`     varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '头像',
    `email`      varchar(128) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '邮箱',
    `last_ip`    varchar(50) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '登录ip',
    `join_ip`    varchar(50) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '注册ip',
    `login_time` datetime                                         DEFAULT NULL COMMENT '登录时间',
    `created_at` datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at` datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at` datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `email` (`email`),
    UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表';

CREATE TABLE `web_nav`
(
    `id`         int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `name`       varchar(50) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '名称',
    `url`        varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'url',
    `sort`       int                                     NOT NULL DEFAULT '0' COMMENT '排序',
    `created_at` datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at` datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at` datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='导航菜单';

CREATE TABLE `web_site`
(
    `id`         int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `name`       varchar(50) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '名称',
    `url`        varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'url',
    `remark`     varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注',
    `sort`       int                                     NOT NULL DEFAULT '0' COMMENT '排序',
    `created_at` datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at` datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at` datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='友情链接';

CREATE TABLE `web_article_cate`
(
    `id`          int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `name`        varchar(15) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '分类名称',
    `keywords`    varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '关键词',
    `description` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '描述',
    `sort`        int                                     NOT NULL DEFAULT '0' COMMENT '排序',
    `is_show`     tinyint(1)                              NOT NULL DEFAULT '1' COMMENT '是否展示 1展示 2不展示',
    `created_at`  datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at`  datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at`  datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章分类';

CREATE TABLE `web_article_tag`
(
    `id`         int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `name`       varchar(15) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '分类名称',
    `remark`     varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注',
    `sort`       int                                     NOT NULL DEFAULT '0' COMMENT '排序',
    `created_at` datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at` datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at` datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章标签';

CREATE TABLE `web_article`
(
    `id`          int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `cate_id`     int                                     NOT NULL DEFAULT '0' COMMENT '分类id',
    `title`       varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标题',
    `cover`       varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '封面图',
    `keywords`    varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '关键词',
    `description` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '描述',
    `sort`        int                                     NOT NULL DEFAULT '0' COMMENT '排序',
    `views`       int                                     NOT NULL DEFAULT '0' COMMENT '浏览量',
    `is_show`     tinyint(1)                              NOT NULL DEFAULT '1' COMMENT '是否展示 1展示 2不展示',
    `created_at`  datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at`  datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at`  datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE,
    KEY           `cate_id` (`cate_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章';

CREATE TABLE `web_article_content`
(
    `article_id` int NOT NULL COMMENT '文章id',
    `content`    mediumtext COLLATE utf8mb4_general_ci COMMENT '内容',
    PRIMARY KEY (`article_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章内容';

CREATE TABLE `web_article_to_tag`
(
    `id`         int NOT NULL AUTO_INCREMENT COMMENT '主键',
    `article_id` int NOT NULL COMMENT '文章id',
    `tag_id`     int NOT NULL COMMENT '标签id',
    PRIMARY KEY (`id`) USING BTREE,
    KEY          `article_id` (`article_id`),
    KEY          `tag_id` (`tag_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章关联标签';

CREATE TABLE `web_article_comment`
(
    `id`         int                             NOT NULL AUTO_INCREMENT COMMENT '主键',
    `user_id`    int                             NOT NULL COMMENT '用户id',
    `article_id` int                             NOT NULL COMMENT '文章id',
    `tid`        int                             NOT NULL DEFAULT '0' COMMENT '顶级id',
    `pid`        int                             NOT NULL DEFAULT '0' COMMENT '上级id',
    `content`    text COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容',
    `created_at` datetime                                 DEFAULT NULL COMMENT '创建时间',
    `updated_at` datetime                                 DEFAULT NULL COMMENT '更新时间',
    `deleted_at` datetime                                 DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE,
    KEY          `article_id` (`article_id`),
    KEY          `tid` (`tid`),
    KEY          `pid` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章评论';

CREATE TABLE `web_project`
(
    `id`          int                                     NOT NULL AUTO_INCREMENT COMMENT '主键',
    `title`       varchar(15) COLLATE utf8mb4_general_ci  NOT NULL DEFAULT '' COMMENT '标题',
    `description` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '描述',
    `url`         varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '项目地址',
    `tags`        varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签',
    `github`      varchar(255)                            NOT NULL DEFAULT '' COMMENT 'github项目',
    `sort`        int                                     NOT NULL DEFAULT '0' COMMENT '排序',
    `created_at`  datetime                                         DEFAULT NULL COMMENT '创建时间',
    `updated_at`  datetime                                         DEFAULT NULL COMMENT '更新时间',
    `deleted_at`  datetime                                         DEFAULT NULL COMMENT '删除时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='项目';

CREATE TABLE `web_config`
(
    `id`      int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
    `content` mediumtext COLLATE utf8mb4_general_ci COMMENT '内容json',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统配置';

-- 初始化数据 --
INSERT INTO `web_nav` (`id`, `name`, `url`, `sort`, `created_at`, `updated_at`, `deleted_at`) VALUES (1, 'Me', '/me', 0, now(), now(), NULL);
INSERT INTO `web_nav` (`id`, `name`, `url`, `sort`, `created_at`, `updated_at`, `deleted_at`) VALUES (2, '项目', '/projects', 0, now(), now(), NULL);
INSERT INTO `web_article` (`id`, `cate_id`, `title`, `cover`, `description`, `keywords`, `views`, `sort`, `created_at`, `updated_at`, `deleted_at`) VALUES (1, 0, '文章标题', '', '文章标题描述', '文章标题关键字', 0, 0, now(), now(), NULL);
INSERT INTO `web_article_content` (`article_id`, `content`) VALUES (1, '文章内容');
INSERT INTO `web_article_tag` (`id`, `name`, `remark`, `sort`, `created_at`, `updated_at`, `deleted_at`) VALUES (1, '标签1', '标签1', 0, now(), now(), NULL);
INSERT INTO `web_article_tag` (`id`, `name`, `remark`, `sort`, `created_at`, `updated_at`, `deleted_at`) VALUES (2, '标签2', '标签2', 0, now(), now(), NULL);


6. 结论

本文介绍的RBAC权限管理系统初期设计提供了一个灵活且可扩展的解决方案。通过合理使用用户、角色、权限和菜单的概念,我们可以构建一个强大的权限管理系统,满足各种复杂的业务需求。

需要强调的是,这只是一个初步的设计方案。在实际应用中,我们需要根据具体的业务需求和系统规模来不断调整和优化数据库结构。同时,也要考虑到性能、安全性、可维护性等因素,以确保系统能够长期稳定运行并满足不断变化的需求。


http://www.kler.cn/news/363533.html

相关文章:

  • js(深浅拷贝,节流防抖,this指向,改变this指向的方法)
  • [DB] Database Compression
  • MusePose模型部署指南
  • 初学者如何学习网络安全,零基础入门到精通,收藏这一篇就够了
  • MFC小游戏设计
  • 2.1 > Shell 是什么、如何更熟练的使用 Bash Shell
  • 初始JavaEE篇——多线程(3):可重入锁、死锁、内存可见性、volatile关键字
  • 网络应用层
  • 深入浅出理解BLE AUDIO CSIS
  • 深入探究安卓 Binder 机制及其应用
  • 学习虚幻C++开发日志——TSet
  • Oracle 更换监听端口
  • 大模型涌现判定
  • 每天五分钟深度学习pytorch:L1和L2范数、L1和L2归一化
  • Spring面试题
  • Deformable Detr
  • 几张图就让你掌握InnoDB 存储引擎底层逻辑架构
  • linux_c IPC消息队列练习
  • OpenHarmony 目前所有体系详细介绍
  • Git的多人协作模式与企业级开发模型
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (三):Cors的设置及.env文件的设置
  • 2024年03月中国电子学会青少年软件编程(图形化)等级考试试卷(四级)答案 + 解析
  • java字段判空方法Assert.hasText()详细讲解
  • 智慧城市垃圾分类可视化
  • 提示词高级阶段学习day3.1什么是结构化 Prompt ?
  • 算法魅力-双指针之滑动窗口的叛逆