当前位置:   article > 正文

【REST2SQL】13 用户角色功能权限设计

【REST2SQL】13 用户角色功能权限设计

【REST2SQL】01RDB关系型数据库REST初设计
【REST2SQL】02 GO连接Oracle数据库
【REST2SQL】03 GO读取JSON文件
【REST2SQL】04 REST2SQL第一版Oracle版实现
【REST2SQL】05 GO 操作 达梦 数据库
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】07 GO 操作 Mysql 数据库
【REST2SQL】08 日志重构增加输出到文件log.txt
【REST2SQL】09 给Go的可执行文件exe加图标和版本信息等
【REST2SQL】10 REST2SQL操作指南
【REST2SQL】11 基于jwt-go生成token与验证
【REST2SQL】12 REST2SQL增加Token生成和验证


用户角色功能权限一般包括功能管理、角色管理、角色功能设置、用户管理、用户角色设置等。

1 权限管理表的设计

这里以oracle建表为例。

1.1 功能表

create table S_MENU
(
  p_id    VARCHAR2(4) not null,
  s_name  VARCHAR2(63),
  s_ename VARCHAR2(63),
  s_winp  VARCHAR2(63),
  s_note  VARCHAR2(63),
  s_parm  VARCHAR2(63)
);
alter table S_MENU
  add constraint PK_S_MENU primary key (P_ID)
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

示例数据如下:
在这里插入图片描述

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9000', '系统管理', null, null, null, '模块');

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9005', '功能菜单', null, 'w_menu', null, null);

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9010', '角色功能设置', null, 'w_role_menu', null, null);

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9020', '用户角色设置', null, 'w_user_role', null, null);

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9055', '代码表', null, 'w_input1_code', null, null);

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9060', '查询分析器', null, 'w_sql', null, null);

insert into S_MENU (P_ID, S_NAME, S_ENAME, S_WINP, S_NOTE, S_PARM)
values ('9065', 'oracle系统锁', null, 'w_oracle_lock', null, null);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

1.2 角色表

create table S_ROLE
(
  p_id   VARCHAR2(17) not null,
  s_name VARCHAR2(52),
  date_t DATE,
  s_note VARCHAR2(52)
);
alter table S_ROLE
  add constraint PK_S_ROLE primary key (P_ID)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

1.3 角色功能表

create table S_ROLE_MENU
(
  pf_role VARCHAR2(17) not null,
  pf_menu VARCHAR2(17) not null,
  date_t  DATE
);
alter table S_ROLE_MENU
  add constraint PK_ROLE_MENU primary key (PF_ROLE, PF_MENU)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

1.4 用户表

create table S_USER
(
  p_id    VARCHAR2(15) not null,
  s_name  VARCHAR2(31),
  s_passw VARCHAR2(52),
  s_sjhm  VARCHAR2(11),
  s_email VARCHAR2(63),
  s_note  VARCHAR2(63)
);
alter table S_USER
  add constraint PK_S_USER primary key (P_ID)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
这里密码用MD5加密保存。加密方法就用oracle自带的md5加密包。

CREATE OR REPLACE FUNCTION MD5_32(plaintext varchar2) RETURN varchar2 is
  --MD5加密
BEGIN
  return utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => plaintext));
END MD5_32;
  • 1
  • 2
  • 3
  • 4
  • 5

1.5 用户角色表

create table S_USER_ROLE
(
  pf_user VARCHAR2(17) not null,
  pf_role VARCHAR2(17) not null,
  date_t  DATE
);
alter table S_USER_ROLE
  add constraint PK_USER_ROLE primary key (PF_USER, PF_ROLE)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
这里一个用户可以设置多个角色,用户的功能权限为多个角色功能权限的叠加,查询语句如下:

select distinct
       m.p_id || m.s_name || nvl(m.s_note,'') as s_name,
        m.s_WINp,   
         m.s_PARM,   
         m.p_id as pf_menu
from s_user_role u
left join s_role_menu r on r.pf_role = u.pf_role
left join s_menu m on m.p_id = r.pf_menu
where u.pf_user = :s_user
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2 系统管理

2.1 用户-角色-功能管理

设计功能菜单、角色功能设置和用户角色设置实现整个系统管理。以下页面用远古时期的Powerbuilder实现。

在这里插入图片描述

2.2 登录验证

select 1 as valid from S_USER where P_id = '9998' and s_passw = md5_32('8999');
  • 1

在这里插入图片描述


本文完。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/263038
推荐阅读
相关标签
  

闽ICP备14008679号