【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)
示例数据如下:
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 角色表
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.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.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)
这里密码用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.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)
这里一个用户可以设置多个角色,用户的功能权限为多个角色功能权限的叠加,查询语句如下:
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
2 系统管理
2.1 用户-角色-功能管理
设计功能菜单、角色功能设置和用户角色设置实现整个系统管理。以下页面用远古时期的Powerbuilder实现。
2.2 登录验证
select 1 as valid from S_USER where P_id = '9998' and s_passw = md5_32('8999');
本文完。