09技术太卷我学APEX-定制页面及导航菜单权限
0 始终没搞明白APEX的角色如果分配页面的权限,只能自己定制一个
APEX现学现卖开发了个《5217仓库管理》,功能在春节前就搞定了,卡在对页面的权限控制,经过翻阅牛人的博客,结合自己的经验终于搞定了。
1 权限管理设计
每个页面配置给自定义角色功能权限,也就是能看到和操作,还有页面对应的导航菜单,然后自定义用户可以配置多个角色,用户通过角色可以获得角色的功能权限。关系图大概如下图:
用户 | 角色 | 页面ID |
---|---|---|
白龙马 | 系统管理 | 10099 |
10100 | ||
10110 | ||
库管 | 410 | |
420 |
一个用户对多个角色,一个角色对多个页面。
1.1 数据库表设计
需要创建4个系统表,保存用户、角色及页面之间的关系。
- 角色表(角色ID,角色名称)
- 角色页面表(角色ID,页面ID)
- 用户表(用户ID,用户姓名,密码)
- 用户角色表(用户ID,角色ID)
--角色表
CREATE TABLE "SYS_ROLE"
( "P_ID" NUMBER(17,0) NOT NULL ENABLE,
"ROLE_NAME" VARCHAR2(17) NOT NULL ENABLE,
"S_NOTE" VARCHAR2(52),
CONSTRAINT "SYS_ROLE_PK" PRIMARY KEY ("P_ID")
USING INDEX ENABLE,
CONSTRAINT "SYS_ROLE_NAME" UNIQUE ("ROLE_NAME")
USING INDEX ENABLE
)
--角色页面表
CREATE TABLE "SYS_ROLE_PAGE"
( "P_ID" NUMBER(17,0) NOT NULL ENABLE,
"ROLE_NAME" VARCHAR2(17) NOT NULL ENABLE,
"PAGE_ID" NUMBER(17,0) NOT NULL ENABLE,
"S_NOTE" VARCHAR2(52),
CONSTRAINT "SYS_ROLE_PAGE_PK" PRIMARY KEY ("P_ID")
USING INDEX ENABLE,
CONSTRAINT "SYS_ROLE_PAGE_UK1" UNIQUE ("ROLE_NAME", "PAGE_ID")
USING INDEX ENABLE
)
--用户表
CREATE TABLE "SYS_USER"
( "P_ID" NUMBER(13,0) NOT NULL ENABLE,
"USER_NAME" VARCHAR2(17) NOT NULL ENABLE,
"PASS_WORD" VARCHAR2(17) NOT NULL ENABLE,
"S_MOBILE" VARCHAR2(17),
"S_EMAIL" NVARCHAR2(52),
"NICK_NAME" VARCHAR2(17),
CONSTRAINT "SYS_USER_PK" P