Postgresql - 用户权限数据库

1、综述

        在实际的软件项目开发过程中,用户权限控制可以说是所有运营系统中必不可少的一个重点功能,根据业务的复杂度,设计的时候可深可浅,但无论怎么变化,设计的思路基本都是围绕着用户、部门、角色、菜单这几个部分展开。

1.1 数据库实体

        1、用户:用户名、密码、头像、个人简介、性别、所属部门以及个人权限

        2、角色:角色名称和描述,暂时无用处,只是定义。后期进行扩展

        3、部门:部门名称、父级部门以及描述

        4、菜单:菜单名称、标识、排序、父级菜单等信息

        5、权限:个人菜单的权限,暂定不根据角色划分

1.2 数据库分析

        数据库设计规范,按照3级范式设计

        1、用户-部门:M:1,包括用户表、部门表,用户包含部门ID

        2、用户-角色:N:M,包括用户表、角色表、用户角色表,用户角色表包括用户ID,角色ID

        3、用户-权限:M:1,包括用户表、权限表、用户表中包括权限ID

        4、权限-菜单:M:M,包括权限表、菜单表、权限菜单表,权限菜单表包括权限ID、菜单ID

2、数据库表设计

2.1 表设计

        用户表、部门表、角色表、用户角色表、权限表、菜单表、权限菜单表

        

2.2 生成数据库完整的SQL

/*==============================================================*/
/* DBMS name:      PostgreSQL 9.x                               */
/* Created on:     2024/7/7 17:49:29                            */
/*==============================================================*/drop index  if exists index_7;drop table if exists menu cascade;drop index  if exists index_1;drop table if exists organization cascade;drop index  if exists index_5;drop table if exists permission cascade;drop index  if exists index_6;drop table if exists permission_menu cascade;drop index  if exists index_4;drop table if exists role cascade;drop index  if exists index_2;drop table if exists user_info cascade;drop index  if exists index_3;drop table if exists user_role cascade;/*==============================================================*/
/* Table: menu                                                  */
/*==============================================================*/
create table menu (id                   varchar(128)         not null,name                 varchar(128)         null,parent_id            varchar(128)         null,menu_type            varchar(128)         null,permission           varchar(128)         null,sort                 int4                 null,status               int4                 null,create_user          varchar(128)         null,create_time          timestamp            null,extension            json                 null,constraint pk_menu primary key (id)
);comment on table menu is
'菜单表';comment on column menu.id is
'菜单编号';comment on column menu.name is
'菜单名称';comment on column menu.parent_id is
'父级编号';comment on column menu.menu_type is
'菜单类别';comment on column menu.permission is
'权限标识';comment on column menu.sort is
'排序';comment on column menu.status is
'状态';comment on column menu.create_user is
'创建人';comment on column menu.create_time is
'创建时间';comment on column menu.extension is
'扩展信息';/*==============================================================*/
/* Index: index_7                                               */
/*==============================================================*/
create  index index_7 on menu (
parent_id
);/*==============================================================*/
/* Table: organization                                          */
/*==============================================================*/
create table organization (id                   varchar(128)         not null,name                 varchar(128)         null,parent_id            varchar(128)         null,description          varchar(256)         null,create_user          varchar(128)         null,create_time          timestamp            null,extension            json                 null,constraint pk_organization primary key (id)
);comment on table organization is
'组织';comment on column organization.id is
'部门编号';comment on column organization.name is
'部门名称';comment on column organization.parent_id is
'父级部门';comment on column organization.description is
'部门描述';comment on column organization.create_user is
'创建人';comment on column organization.create_time is
'创建时间';comment on column organization.extension is
'扩展信息';/*==============================================================*/
/* Index: index_1                                               */
/*==============================================================*/
create  index index_1 on organization (
parent_id
);/*==============================================================*/
/* Table: permission                                            */
/*==============================================================*/
create table permission (id                   varchar(128)         not null,name                 varchar(256)         null,description          varchar(256)         null,create_user          varchar(128)         null,create_time          timestamp            null,extension            json                 null,constraint pk_permission primary key (id)
);comment on table permission is
'权限表';comment on column permission.id is
'角色编号';comment on column permission.name is
'角色名称';comment on column permission.description is
'角色描述';comment on column permission.create_user is
'创建人';comment on column permission.create_time is
'创建时间';comment on column permission.extension is
'扩展信息';/*==============================================================*/
/* Index: index_5                                               */
/*==============================================================*/
create  index index_5 on permission (
name
);/*==============================================================*/
/* Table: permission_menu                                       */
/*==============================================================*/
create table permission_menu (id                   varchar(128)         not null,permission_id        varchar(128)         null,menu_id              varchar(128)         null,constraint pk_permission_menu primary key (id)
);comment on table permission_menu is
'权限菜单表';/*==============================================================*/
/* Index: index_6                                               */
/*==============================================================*/
create  index index_6 on permission_menu (
permission_id,
menu_id
);/*==============================================================*/
/* Table: role                                                  */
/*==============================================================*/
create table role (id                   varchar(128)         not null,name                 varchar(256)         null,description          varchar(256)         null,create_user          varchar(128)         null,create_time          timestamp            null,extension            json                 null,constraint pk_role primary key (id)
);comment on table role is
'角色信息表';comment on column role.id is
'角色编号';comment on column role.name is
'角色名称';comment on column role.description is
'角色描述';comment on column role.create_user is
'创建人';comment on column role.create_time is
'创建时间';comment on column role.extension is
'扩展信息';/*==============================================================*/
/* Index: index_4                                               */
/*==============================================================*/
create  index index_4 on role (
name
);/*==============================================================*/
/* Table: user_info                                             */
/*==============================================================*/
create table user_info (id                   varchar(128)         not null,username             varchar(128)         null,password             varchar(256)         null,aliasname            varchar(128)         null,phone                varchar(20)          null,face                 varchar(256)         null,profile              varchar(500)         null,sex                  int4                 null,org_id               varchar(128)         null,permission_id        varchar(128)         null,create_user          varchar(128)         null,create_time          timestamp            null,extension            json                 null,constraint pk_user_info primary key (id)
);comment on table user_info is
'用户信息表';comment on column user_info.id is
'用户编号';comment on column user_info.username is
'用户名';comment on column user_info.password is
'用户密码';comment on column user_info.aliasname is
'用户昵称';comment on column user_info.phone is
'用户电话';comment on column user_info.face is
'头像图片';comment on column user_info.profile is
'个人简介';comment on column user_info.sex is
'性别';comment on column user_info.org_id is
'所在部门';comment on column user_info.permission_id is
'权限编号';comment on column user_info.create_user is
'创建人';comment on column user_info.create_time is
'创建时间';comment on column user_info.extension is
'扩展信息';/*==============================================================*/
/* Index: index_2                                               */
/*==============================================================*/
create  index index_2 on user_info (
username,
password,
phone
);/*==============================================================*/
/* Table: user_role                                             */
/*==============================================================*/
create table user_role (id                   varchar(128)         not null,user_id              varchar(128)         null,role_id              varchar(128)         null,constraint pk_user_role primary key (id)
);comment on table user_role is
'用户角色表';comment on column user_role.id is
'编号';comment on column user_role.user_id is
'用户编号';comment on column user_role.role_id is
'角色编号';/*==============================================================*/
/* Index: index_3                                               */
/*==============================================================*/
create  index index_3 on user_role (
user_id,
role_id
);alter table permission_menuadd constraint fk_permissi_reference_permissi foreign key (permission_id)references permission (id)on delete cascade on update restrict;alter table permission_menuadd constraint fk_permissi_reference_menu foreign key (menu_id)references menu (id)on delete cascade on update restrict;alter table user_infoadd constraint fk_user_inf_reference_organiza foreign key (org_id)references organization (id)on delete cascade on update restrict;alter table user_infoadd constraint fk_user_inf_reference_permissi foreign key (permission_id)references permission (id)on delete set null on update restrict;alter table user_roleadd constraint fk_user_rol_reference_user_inf foreign key (user_id)references user_info (id)on delete cascade on update restrict;alter table user_roleadd constraint fk_user_rol_reference_role foreign key (role_id)references role (id)on delete cascade on update restrict;

3、数据库部署

3.1 docker部署数据库

        1、创建部署文件

        Docker Compose 简化了对整个应用程序堆栈的控制,使得在一个易于理解的 YAML 配置文件中轻松管理服务、网络和数据卷。要使用 Docker Compose 部署 PostgreSQL,首先需创建一个docker-compose.yml文件,如下所示:

version: '3'
services:postgres:image: postgres:13restart: alwaysports:- 5432:5432environment:POSTGRES_USER: postgresPOSTGRES_PASSWORD: postgresvolumes:- /home/pg/data:/var/lib/postgresql/datapgadmin:image: dpage/pgadmin4restart: alwaysports:- 5050:80environment:- PGADMIN_DEFAULT_EMAIL=admin@pgadmin.com- PGADMIN_DEFAULT_PASSWORD=adminvolumes:- /home/pg/admin:/var/lib/pgadmin
  • image:指定了要使用的 Docker 镜像及其版本。在这里,我们使用了官方的 PostgreSQL 13 版本镜像。为了确保系统的稳定性和兼容性,推荐使用 PostgreSQL 官方镜像的一个稳定版本而不是最新版(latest)。通常来说,生产环境中应该避免使用 latest 标签,因为它指向最新的版本,而最新版本可能包含未经充分测试的特性或变化,这可能会影响到生产环境的稳定性。
  • environment:设置环境变量。我们为 PostgreSQL 数据库设置了密码 root。请将其更改为更安全的密码。这是postgres默认管理员账户的密码。由于这个值是必需的,如果没有设置,容器将无法启动。
  • ports:用来将容器的端口映射到宿主机的端口,使得宿主机能够与集群进行通信。通常,只有服务需要直接从宿主机的网络访问时,我们才会映射端口。将容器的 5432 端口映射到宿主机的 5432 端口,使外部可访问 PostgreSQL。
  • volumes:实现数据持久化的关键部分。PostgreSQL 存储数据在 /var/lib/postgresql/data 路径,日志存储在 /var/log/postgresql 路径。postgres_db 服务将这两个路径映射到宿主机的数据卷的 data 和 log 的数据卷上。这意味着即使容器被删除,存储在这两个数据卷上的数据也不会丢失,实现了数据的持久化。配置日志数据卷是一个好的实践,它可以帮助你更好地管理和保存日志文件,以便于问题诊断和性能监控。

         2、启动服务:docker compose up -d

3.2 创建数据库表

        1、登录数据库

        我的地址:http://192.168.0.21:5050/browser/

        2、创建数据库

        3、运行数据库sql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/374929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑数据恢复篇:如何从电脑中恢复已删除的照片

按下 Shift Delete 后后悔了?想要恢复已删除的照片?好吧,如果是这样的话,你来对地方了。在本文中,我们将讨论如何从 PC 中恢复已删除的文件。 自从摄影的概念被提出以来,人们就对它着迷。以前&#xff0c…

【SQL】DML、DDL、ROLLBACK 、COMMIT详解

DML DML(Data Manipulation Language)数据操作语言,是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统(DBMS)中的一个重要部分,它允许用户或应用程序对数据库中的数据进行增、删、改…

【鸿蒙学习笔记】文件管理

官方文档:Core File Kit简介 目录标题 文件分类什么是应用沙箱? 文件分类 应用文件,比如应用的安装包,自己的资源文件等。用户文件,比如用户自己的照片,录制的音视频等。 什么是应用沙箱? 应…

Socks5代理为何比HTTP代理快?

在网络世界中,代理服务器扮演着重要的角色,它们能够帮助我们访问被限制的网站、提高网络安全性以及优化网络性能。其中,Socks5代理和HTTP代理是两种常见的代理类型。然而,很多用户发现,相较于HTTP代理,Sock…

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…

3D互动+AR试戴,赋能珠宝品牌线上营销!

随着电商浪潮的汹涌而至,珠宝这一传统上依赖实体店铺销售的行业,正积极拥抱线上转型的浪潮。然而,面对珠宝商品高客单价及消费者对于亲身体验的强烈需求,线上销售面临诸多挑战,尤其是图片展示难以全面展现珠宝魅力&…

Git 操作总结

1. 安装、Git 环境配置 1.1 安装 Git 官方版本可以在 Git 官方网站下载:打开 https://git-scm.com/download/win,选择相应版本即可。 Git 安装完成后,可以在开始菜单中看到 Git 的三个启动图标(Git Bash、Git CMD、Git GUI&…

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…

keepalived高可用集群

一、keepalived: 1.keepalive是lvs集群中的高可用架构,只是针对调度器的高可用,基于vrrp来实现调度器的主和备,也就是高可用的HA架构;设置一台主调度器和一台备调度器,在主调度器正常工作的时候&#xff0…

阿里云操作系统智能助手OS Copilot实验测评报告

阿里云操作系统智能助手OS Copilot产品说明 阿里云操作系统智能助手 OS copilot 是一款基于云原生技术的操作系统,具有智能化、自动化和可扩展性等特点。它可以帮助用户快速构建、部署和管理云上应用,提高运维效率和系统稳定性。OS copilot 支持多种主流…

【踩坑】解决undetected-chromedriver报错cannot connect to-chrome

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 更新: 发现一个非常好用的项目,直接内置uc: GitHub - seleniumbase/SeleniumBase: 📊 Pythons all-in…

int类型变量表示范围的计算原理

文章目录 1. 了解2. 为什么通常情况下int类型整数的取值范围是-2147483648 ~ 21474836473. int类型究竟占几个字节4. 推荐 1. 了解 通常情况下int类型变量占4个字节,1个字节有8位,每位都有0和1两种状态,所以int类型变量一共可以表示 2^32 种状…

访问者模式(Visitor Pattern)

访问者模式(Visitor Pattern) 定义 访问者模式(Visitor Pattern) 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 该模式的主要思想是将作用于某种数据结构中的各…

【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:理解【Linux】线程池|单例模式|STL、智能指针线程安全|读者写者问题。 > 毒鸡汤:有些事情,总是不明白,所以我不会…

零信任安全新纪元:零信任沙箱的源代码保护策略

在数字世界的战场上,安全防护是每一家企业的生命线。今天,我们要介绍的是一款革命性的安全工具——SDC沙箱,它以零信任的理念为核心,为您的源代码和敏感数据筑起一道坚不可摧的防线。 什么是零信任沙箱? 零信任&…

Outlook邮件提醒通知功能详解:设置教程!

Outlook邮件提醒通知使用指南?如何个性设计邮件通知? 为了帮助用户更好地管理邮件,Outlook提供了强大的邮件提醒通知功能。AokSend将详细介绍如何设置和使用Outlook邮件提醒通知功能,以提高工作效率和管理时间的能力。 Outlook邮…

Agent Group复现

项目链接 温馨提示,token量很大,最好搞的免费额度的。例如智谱注册即赠额度。 git clone https://github.com/MikeGu721/AgentGroup.git cd AgentGroup pip install -r requirements.txt # set your api url and key in ./prompt/utils.py 这里可以配置…

单例模式(Singleton Pattern)

单例模式(Singleton Pattern) 定义 是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 隐藏起所有的构造方法。 属于创建型模式。 适用场景 确保任何情况下都绝对只有一个实例。 比如数据库连接池、配置文件读取、缓…

android13 cat /proc/cupinfo没有Serial问题

1.前言 我们有些客户是使用cpuinfo节点去获取系统的cpuid的,如下: cat /proc/cupinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU impleme…

分享一个 .NET 通过监听器拦截 EF 消息写日志的详细例子

前言 EF 开发效率确实很高也很便捷,但当它发生错误时,也挺让人头疼的,为什么?因为 EF 就像是一个黑盒子,一切全被封装起来,出错的时候很难定位原因,如果能够知道并打印 EF 生成的 SQL 语句&…