09技术太卷我学APEX-定制页面及导航菜单权限

news2024/10/10 6:20:18

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" PRIMARY KEY ("P_ID")
  USING INDEX  ENABLE, 
	 CONSTRAINT "SYS_USER_UK1_USER_NAME" UNIQUE ("USER_NAME")
  USING INDEX  ENABLE, 
	 CONSTRAINT "SYS_USER_UK2_S_MOBILE" UNIQUE ("S_MOBILE")
  USING INDEX  ENABLE, 
	 CONSTRAINT "SYS_USER_UK3_S_EMAIL" UNIQUE ("S_EMAIL")
  USING INDEX  ENABLE
   )

--用户角色表
CREATE TABLE  "SYS_USER_ROLE" 
   (	"P_ID" NUMBER(17,0) NOT NULL ENABLE, 
	"USER_NAME" VARCHAR2(17) NOT NULL ENABLE, 
	"ROLE_NAME" VARCHAR2(17) NOT NULL ENABLE, 
	"S_NOTE" VARCHAR2(52), 
	 CONSTRAINT "SYS_USER_ROLE_PK" PRIMARY KEY ("P_ID")
  USING INDEX  ENABLE, 
	 CONSTRAINT "SYS_USER_ROLE_UK1" UNIQUE ("USER_NAME", "ROLE_NAME")
  USING INDEX  ENABLE
   )

2 创建5个管理页面

2.1 角色管理

交互网格带编辑
在这里插入图片描述

2.2 角色页面管理

交互网格带编辑
在这里插入图片描述
创建角色值列表
在这里插入图片描述

创建页面值列表
在这里插入图片描述

select t.page_alias,t.page_id,t.page_name,t.page_title,t.page_mode,t.page_function
from APEX_APPLICATION_PAGES t 
where application_id = :APP_ID

这里用到了APEX的视图;
两个值列表配置到角色和页面ID列。

2.3 用户管理

交互式网格+表单
在这里插入图片描述
在这里插入图片描述

2.4 用户角色管理

交互式网格加编辑
在这里插入图片描述

创建用户值列表
在这里插入图片描述
用户和角色值列表配置到用户和角色。

2.5 系统管理

在这里插入图片描述

以上4个页面做一个系统管理导航卡列表。

在这里插入图片描述

3 创建授权方案

3.1 创建一个授权控制函数F_CONTROL在这里插入图片描述

create or replace function "F_CONTROL"
(p_username in VARCHAR2,
 p_pageid in number)
return boolean
is
    b_ret boolean :=false;
    c_1 number;
begin
    select count(1) into c_1 from v_sys_user_role_page
        where user_name = p_username and page_id = p_pageid;
    if (c_1 >= 1) then 
        b_ret := true;
    else
        b_ret := false;
    end if;   
    return b_ret;
   
    exception when others then
        return false; 
end;

3.2 创建授权方案

在这里插入图片描述
名称:随便自己输入
方案类型:返回布尔值的PL/SQL函数
PL/SQL函数体:传入当前登录用户和当前页面
求值点:每次页访问一次

4 页面授权控制

设置需求授权的页面设置安全性如下图:
在这里插入图片描述
这样设置后,就是直接在IP地址栏输入页面也需求授权许可。

需要授权的都设置上授权方案:
在这里插入图片描述

5 导航授权控制

设计是这样没有,根据登录帐户,没有授权的页面链接就不在导航菜单上显示了。目前为静态导航菜单,需要引用静态导航菜单的数据创建一个动态的导航菜单。

5.1 创建静态导航菜单的视图

在这里插入图片描述

这里用到APEX的系统视图,代码如下:

CREATE OR REPLACE FORCE EDITIONABLE VIEW "V_MY_MENU" ("PARENT_ENTRY_TEXT", "DISPLAY_SEQUENCE", "ENTRY_TEXT", "PAGE_ID", "ENTRY_TARGET") AS 
  select parent_entry_text,display_sequence,entry_text,
	regexp_replace(entry_target,'[^0-9]') as page_id,entry_target	 
from apex_application_list_entries t
where application_id = 104313 and list_id = 38247996304963868908
order by t.display_sequence

这里用到Oracle的正则表达式替换函数提取出目标的页面id:regexp_replace(entry_target,‘[^0-9]’) as page_id
视图的数据如下:
在这里插入图片描述

5.2 创建动态导航菜单视图

在这里插入图片描述
这里只支持2级菜单。
代码如下:

CREATE OR REPLACE FORCE EDITIONABLE VIEW "CK_MENU_V" ("LEVEL_VALUE", "LABEL_VALUE", "TARGET_VALUE", "IS_CURRENT", "IMAGE_VALUE", "IMAGE_ATTR_VALUE", "IMAGE_ALT_VALUE", "DISPLAY_ORDER", "PAGE_ID") AS 
  select 1 as LEVEL_VALUE,entry_text as LABEL_VALUE,entry_target as TARGET_VALUE, '' as IS_CURRENT,
	ENTRY_IMAGE as IMAGE_VALUE,'' as IMAGE_ATTR_VALUE,'' as IMAGE_ALT_VALUE, display_sequence as DISPLAY_ORDER,
	regexp_replace(entry_target,'[^0-9]') as page_id
from apex_application_list_entries 
where application_id = 104313 and list_id = 38247996304963868908 and parent_entry_text is null
union all
select 2 as LEVEL_VALUE,entry_text as LABEL_VALUE,entry_target as TARGET_VALUE, '' as IS_CURRENT,
	ENTRY_IMAGE as IMAGE_VALUE,'' as IMAGE_ATTR_VALUE,'' as IMAGE_ALT_VALUE, display_sequence as DISPLAY_ORDER,
	regexp_replace(entry_target,'[^0-9]') as page_id
from apex_application_list_entries 
where application_id = 104313 and list_id = 38247996304963868908 and parent_entry_text is not null
order by DISPLAY_ORDER

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

5.3 创建一个动态列表并设置为导航菜单

创建动态列表:
在这里插入图片描述
动态列表SQL:
``
select * from ck_menu_v
where page_id in (
select distinct page_id from V_SYS_USER_ROLE_PAGE where user_name = :APP_USER
)

设置以上动态列表为导航菜单:
![在这里插入图片描述](https://img-blog.csdnimg.cn/586f047231b243bb959a02cb766608ae.png)



## 6 效果DEMO
到这里总算一切OK了,看一下效果:
### 6.1 系统管理 
![在这里插入图片描述](https://img-blog.csdnimg.cn/5e4579f43e3e4b1585f6908c715cb7b8.png)
### 6.2 角色管理 
![在这里插入图片描述](https://img-blog.csdnimg.cn/1754ace8e6be4513b0807ea6481302e1.png)

### 6.3 角色页面管理 
![在这里插入图片描述](https://img-blog.csdnimg.cn/949d0bf735cf494886508be4c1bf8cb7.png)
### 6.4 用户管理 
![在这里插入图片描述](https://img-blog.csdnimg.cn/49e74bfd58994c479c768bcb8b3582fb.png)

### 6.5 用户角色管理 
![在这里插入图片描述](https://img-blog.csdnimg.cn/d6a9fdb034cd4ad0b5a6ed42cd8dcb4f.png)
### 6.6 换APEX用户登录
![在这里插入图片描述](https://img-blog.csdnimg.cn/2f92f036e64e4de2b76580ddb3fbfe09.png)
没有了【系统管理】导航菜单,直接输入页面地址试试

![在这里插入图片描述](https://img-blog.csdnimg.cn/cb52308ed2364d98a12660efafe8f70d.png)
也访问不了,第一行就是自定义的错误信息。

OK了,一个完整定制验证(验证参阅 01 技术太卷我学APEX-定制验证方案)和授权就完成了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用vue3,vite,less从零开始学习硅谷外卖.docx

严正声明! 重要的事情说三遍,本文章仅供分享,文章和代码都是开源的,严禁以此牟利,严禁侵犯尚硅谷原作视频的任何权益,我知道学习编程的人各种各样的心思都有,但这不是你对开源社区侵权的理由&am…

读书:《高效的秘密》

#《高效的秘密》的作者是《纽约时报》商业调查记者查尔斯都希格,他的另一本畅销书是《习惯的力量》。 高效不是超额工作、拼命工作,甚至牺牲自己的个人生活。高效的秘密取决于你做选择的方式。 一、激发动力,重新审视效率产生的源头 掌控力…

1.7 Cubemx STM32F429_RTX FATFS 库函数讲解(三)

文章目录1、打开文件夹2、读取文件夹3、打开\新建一个文件5、读取文件1、打开文件夹 FRESULT f_opendir ( DIR* DirObject, /* Pointer to the blank directory object structure */ const TCHAR* DirName /* Pointer to the directory name */ ) 函数说明: 此函数可以打开…

React中如何使用Mobx

一、Mobx前端状态管理框架 基础概念? 1. 什么是Mobx Mobx是一个简单、可扩展的状态管理库 2. 什么是状态管理? 状态管理就是将分布在各个组件、各个模块中的状态的变化,按照一定的规则,进行统一的管理。 3. 为什么需要状态管…

NX二开ufun函数创建块/基准平面/凸台/垫块/腔体

本节主要讲述通过ufun函数直接创建块、基准平面、凸台、垫块、腔体,涉及ufun函数如下: 1、创建块 UF_MODL_create_block 2、创建基准平面 UF_MODL_create_fixed_dplane 3、创建凸台 UF_MODL_create_boss 4、创建垫块 UF_MODL_create_rect_pad5 5、创…

聊聊如何成为更好的架构师?

之前有小伙伴咨询架构方向需要学习什么,需要什么技术储备,今天就来深入聊聊这个话题。 就此探讨下必备技能、经验,以及储备相关知识所需的时间和精力。除此之外,我也回顾了自己走过的路、使用或尝试过的技术,以及我从…

开学季,送什么给小学生实用?学生最实用的护眼好物

伴随着“立春”,又到新的春季开学季,不管是家长还是孩子面对每个学期的循环,每一次都有新的故事和发现,很快就要开学了,给学生的小礼物准备好了吗,作为父母、长辈送给孩子最好的礼物,我认为莫过…

大数据舆情分析软件实时监控,TOOM大数据处理与舆情监控简介

舆情数据分析处理是指通过使用大数据技术、人工智能、自然语言处理等,从舆情数据中提取信息,进行模型建立、模式识别、情感分析等,从而了解舆论情况。舆情数据分析处理的目的是了解舆论趋势、话题热点、网民情绪等,从而便于企业、…

中国电子学会2022年03月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

分数:100 题数:24 一、单选题(共10题,共30分) 1. 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数?注意:每一位都不相同,最高位不能为0。( ) A. 720 B. 360 C. …

动态规划Dynamic Programming的基础解法

本文是对Jeff Erickson经典算法入门书籍《Algorithms》中动态规划问题的阅读笔记,近期在刷一些编程题,对于如何凑出动态规划更新的范式,脑袋里一直是一团乱麻,特别看完了别人的题解,只是惊叹其脑洞,但一直搞…

分页数据渲染

SearchResult属性增加 增加属性 private List<Integer> pageNavs; 目的&#xff1a;产生分页效果&#xff0c;方便操作&#xff0c;navs记录了从1到总页数的暑假 不是第一页时显示上一页 <a class"page_a" th:attr"pn${result.pageNum - 1}" hre…

算法基础集训(第30天)------>DFS之经典【n皇后问题】

一&#xff1a;概念定义n−皇后问题是指将 n个皇后放在 nn的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。二&#xff1a;题目描述n−皇后问题是指将 n个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇…

【C++入门】函数重载

目  录1 函数重载概念2 C支持函数重载的原理 -- 名字修饰&#xff08;name Mangling&#xff09;1 函数重载概念 函数重载&#xff1a; 函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这些同名函数的形参列表&#xff08;参数个数…

企企通入选「AI中国」机器之心“最具商业价值解决方案 TOP 30” 榜单

近日&#xff0c;由专业的人工智能信息服务平台机器之心&#xff0c;发起并评选的「AI 中国」机器之心2022 年度评选榜单正式公布&#xff0c;企企通凭借过去一年在采购供应链领域取得的成就&#xff0c;以及在技术、产品、服务能力方面具备的独特优势&#xff0c;从众多企业中…

Python连接Liunx中mysql数据库-三表查询【10个经典案例】

关于Python连接liunx中mysql数据库的方式在这一篇文章 Python连接Liunx中mysql数据库-保姆级教程 关于Python针对liunx中的mysql数据库进行增删改查操作的文章在这一篇可以看一下 Python连接Liunx中mysql数据库-增删改查 对于单表查询的学习可以看这一篇文章 Python对liunx中my…

使用.ibd文件恢复Mysql数据库数据

使用.ibd文件恢复Mysql数据库数据问题发现问题解决第一步&#xff1a;查找mysql数据目录第二步&#xff1a;创建表第三步&#xff1a;解除表空间第四步&#xff1a;复制原数据库.ibd文件第五步&#xff1a;导入表空间ERROR 1030 (HY000): Got error 194 “Tablespace is missin…

使用Navicat生成MySQL测试数据

使用Navicat生成MySQL测试数据 Navicat版本&#xff1a;16.1.3 场景&#xff1a;因为某些原因&#xff0c;本人负责项目的数据库需要从MySQL迁移到PostgreSQL&#xff0c;所以就想测试一下PostgreSQL数据库的分区表性能。测性能的话大概需要两千万的测试数据&#xff0c;从生…

蓝队--Linux基线安全检查

文章目录认证账号和口令安全创建用户用户安全基线授权文件系统安全审计日志安全日志存放的位置设备等级观察一条日志产生的过程网络安全网络协议与服务安全SSH的配置防火墙安全操作系统SELinux登陆安全kali忘记密码怎么办怎么物理加密进入BOIS界面选择Security选择set User Pas…

【前端】css样式视口、布局

一、 视口概念 视口&#xff08;viewport&#xff09;是用来约束网页中最顶级块元素的&#xff0c;即它决定了网页的大小&#xff0c;网页是先在视口上渲染&#xff0c;然后再通过视口放回到浏览器窗口上的&#xff0c;网页的渲染过程如下&#xff1a; pc端视口的大小和浏览器…

Python---类与对象

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些python的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 类与对象前言定义类创建对象前言 面向对象跟函…