`

Oracle 第七天 权限系统

阅读更多
用户实际需求

1.       所有的用户、角色可动态配置
2.       所有的系统菜单的权限要求具体到“增,删,改、查、打印、导出”这样的小权限的设计
3.       所有的权限基于角色来进行划分和判断
4.       一个用户可能属于多个角色
5.       系统菜单也能够动态的“增、删、改、查”





T_User表
CREATE
    TABLE T_USERS
    (
        USER_ID VARCHAR2(16) NOT NULL,
        PASSWORD CHAR(8),
        USER_NAME VARCHAR2(16),
        PRIMARY KEY (USER_ID)
    )

T_ROLE 表
CREATE
    TABLE T_ROLE
    (
        ROLE_ID VARCHAR2(16) NOT NULL,
        ROLE_DESCR VARCHAR2(32),
        PRIMARY KEY (ROLE_ID)
    )

CREATE
    TABLE T_USER_ROLE
    (
        USER_ID VARCHAR2(16) NOT NULL,
        ROLE_ID VARCHAR2(16) NOT NULL,
        PRIMARY KEY (USER_ID, ROLE_ID),
        CONSTRAINT FK_USER_ID FOREIGN KEY (USER_ID) REFERENCES T_USERS (USER_ID)
        ON
    DELETE
        CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE VALIDATE,
        CONSTRAINT FK_ROLE_ID FOREIGN KEY (ROLE_ID) REFERENCES T_ROLE (ROLE_ID)
        ON
    DELETE
        CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE VALIDATE
    )


CREATE
    TABLE T_SYS_MENU
    (
        MENU_ID VARCHAR2(16) NOT NULL,
        MENU_DESCR VARCHAR2(32),
        MENU_URL VARCHAR2(255),
        MENU_PID VARCHAR2(16),
        PRIMARY KEY (MENU_ID)
    )

CREATE
    TABLE T_PRIVILEGE
    (
        PRIVILEGE_ID VARCHAR2(3) NOT NULL,
        PRIVILEGE_TYPE VARCHAR2(8),
        PRIMARY KEY (PRIVILEGE_ID)
    )

CREATE
    TABLE T_MENU_PRIVILEGE
    (
        PKID VARCHAR2(16) NOT NULL,
        ROLE_ID VARCHAR2(16),
        MENU_ID VARCHAR2(16),
        PRIVILEGE_ID VARCHAR2(16),
        PRIMARY KEY (PKID),
        CONSTRAINT FK_ROLE_TO_PRIV FOREIGN KEY (ROLE_ID) REFERENCES T_ROLE (ROLE_ID)
        ON
    DELETE
        CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE VALIDATE,
        CONSTRAINT FK_PRIV FOREIGN KEY (PRIVILEGE_ID) REFERENCES T_PRIVILEGE (PRIVILEGE_ID)
        ON
    DELETE
        CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE VALIDATE,
        CONSTRAINT FK_MENU_TO_PRIV FOREIGN KEY (MENU_ID) REFERENCES T_SYS_MENU (MENU_ID)
        ON
    DELETE
        CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE VALIDATE
    )

插入数据

insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Tonny', 'abcdefg ', null);
insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Sammy', 'abcdefg ', null);
insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Sally', 'abcdefg ', null);
insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Jim', 'abcdefg ', null);
insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Danzel', 'abcdefg ', null);
insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Andy', 'abcdefg ', null);
insert into T_USERS (USER_ID, PASSWORD, USER_NAME) values ('Shawn', 'abcdefg ', null);


insert into T_ROLE (ROLE_ID, ROLE_DESCR) values ('user', '普通用户');
insert into T_ROLE (ROLE_ID, ROLE_DESCR) values ('manager', '部门经理');
insert into T_ROLE (ROLE_ID, ROLE_DESCR) values ('gmanager', '老总');
insert into T_ROLE (ROLE_ID, ROLE_DESCR) values ('admin', 'IT管理员');


insert into T_USER_ROLE (USER_ID, ROLE_ID) values ('Danzel', 'admin');
insert into T_USER_ROLE (USER_ID, ROLE_ID) values ('Danzel', 'manager');
insert into T_USER_ROLE (USER_ID, ROLE_ID) values ('Jim', 'admin');
insert into T_USER_ROLE (USER_ID, ROLE_ID) values ('Sammy', 'user');
insert into T_USER_ROLE (USER_ID, ROLE_ID) values ('Tonny', 'user');


insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('101', '报表查询', null, '0');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('102', '月报', 'xxx.do', '101');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('103', '季报', 'xxx.do', '101');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('104', '年报', 'xxx.do', '101');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('105', '系统管理', null, '0');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('106', '用户管理', null, '105');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('107', '新增用户', 'addUser.do', '106');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('108', '删除用户', 'delUser.do', '106');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('109', '角色管理', null, '105');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('110', '新增角色', 'addRole.do', '109');
insert into T_SYS_MENU (MENU_ID, MENU_DESCR, MENU_URL, MENU_PID) values ('111', '删除角色', 'delRole.do', '109');



insert into T_PRIVILEGE (PRIVILEGE_ID, PRIVILEGE_TYPE) values ('101', '增加');
insert into T_PRIVILEGE (PRIVILEGE_ID, PRIVILEGE_TYPE) values ('106', '报表');
insert into T_PRIVILEGE (PRIVILEGE_ID, PRIVILEGE_TYPE) values ('105', '打印');
insert into T_PRIVILEGE (PRIVILEGE_ID, PRIVILEGE_TYPE) values ('104', '查询');
insert into T_PRIVILEGE (PRIVILEGE_ID, PRIVILEGE_TYPE) values ('103', '修改');
insert into T_PRIVILEGE (PRIVILEGE_ID, PRIVILEGE_TYPE) values ('102', '删除');


insert into T_MENU_PRIVILEGE (PKID, ROLE_ID, MENU_ID, PRIVILEGE_ID) values ('1', 'user', '101', '106');
insert into T_MENU_PRIVILEGE (PKID, ROLE_ID, MENU_ID, PRIVILEGE_ID) values ('2', 'user', '102', '106');

递归查询菜单
SELECT * FROM T_SYS_MENU START WITH MENU_PID = 0 CONNECT BY PRIOR MENU_ID = MENU_PID ORDER BY MENU_ID;




已经用数据查询用句就将我们的这个“树”的层次关系理出来了,如果我们手上有一个控件叫dtree.js,那么一个循环就可以把这个树显示出来了





查询用户所能看到的菜单和所具有的权限
select distinct m.menu_id,m.menu_descr,m.menu_url,m.menu_pid,p.privilege_id,p.privilege_type from
t_menu_privilege mp,
t_sys_menu m,
t_privilege p,
t_user_role r
where
mp.privilege_id=p.privilege_id
and mp.role_id=r.role_id
and mp.menu_id=m.menu_id
and r.role_id='user'
order by m.menu_id;

结果示例图


还可参考
RBAC(Role-Based Access Control,基于角色的访问控制)













  • 大小: 70.8 KB
  • 大小: 31.1 KB
  • 大小: 58.9 KB
  • 大小: 42.1 KB
  • 大小: 52.3 KB
  • 大小: 85.5 KB
  • 大小: 144.2 KB
  • 大小: 12 KB
分享到:
评论

相关推荐

    21天学会oracle

    第7章 视图.ppt 第8章 函数与存储过程.ppt 第9章 游标.ppt 第10章 触发器.ppt 第11章 序列.ppt 第12章 用户角色与权限控制.ppt 第13章 Oracle数据类型.ppt 第14章 Oracle中的函数与表达式.ppt 第15章 Oracle中的控制...

    21天学通Oracle

    第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新...

    ORACLE9i_优化设计与系统调整

    第7章 系统优化方法 85 §6.1 何时优化效率最高 85 §6.1.1 系统设计阶段和开发阶段的优化 85 §6.1.2 改善产品系统的优化 85 §6.2 优化的优先步骤 86 §6.2.1 步骤1:优化商业规则 86 §6.2.2 步骤2:优化数据设计...

    Oracle11g从入门到精通2

    第7章 Oracle数据库管理操作 7.1 学会使用视图 7.1.1 增加安全性 7.1.2 隐藏数据的复杂性 7.1.3 实现命名简洁性和易读性 7.1.4 实现更改灵活性 7.2 实现记录的唯一性 7.2.1 用键实现 7.2.2 创建唯一...

    oracle 入门很简单.zip

    第7章Oracle中的数值型ppt 第8章Oracle中的日期型ppt 第9章Oracle中的复杂数据处理ppt 第10章Oracle中的控制语句.ppt 第11章视图ppt 第12章约速ppt 第13章游标pp 第14章触发器ppt 第15章序列.ppt 第16章用户、角色与...

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第7章-PLSQL基础 PL/SQL是什么 PL/SQL 变量的使用 表达式 PL/SQL结构控制 PL/SQL中使用DML和DDL语言 PL/SQL中的异常 PL/SQL函数编写 第8章-游标,数据的缓存区 什么是游标 显示游标 隐式游标 第9章-...

    完整版Oracle11数据库教程课件 全套PPT课件资源集合 全套12个章节.rar

    完整版Oracle11数据库教程课件 第7章_高级查询(共52页).ppt 完整版Oracle11数据库教程课件 第8章_索引视图(共35页).ppt 完整版Oracle11数据库教程课件 第9章_PLSQL编程基础(共59页).ppt 完整版Oracle11数据库...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    第7章 高可用数据库类型 7.1 Restart数据库 7.1.1安装Restart数据库 7.1.2 Grid Infrastructure重新配置 7.1.3 Restart数据库的管理 7.2 RAC One Node数据库 7.2.1安装RAC One Node数据库 7.2.2 RAC One Node...

    数据库系统管理与维护(Oracle)第三次作业.doc

    题目1、系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为 ( A)。 选择一项: a. 后台进程 b. 单进程 c. 用户进程 d. 例程 题目2、在创建用户的命令中,下列哪个关键字是限制用户可以使用...

    Oracle四大宝典之二:Oracle基本管理 中文版

    第七章 管理表空间和数据文件 第八章 还原(回滚)数据管理 第九章 管理表 第十章 管理索引 第十一章 维护数据完整 第十二章 数据库安全管理 第十三章 管理用户 第十四章 管理角色 第十五章 管理权限 第十六章 审计 ...

    完整版Oracle11数据库教程课件 第12章_备份与恢复(共66页).ppt

    完整版Oracle11数据库教程课件 第7章_高级查询(共52页).ppt 完整版Oracle11数据库教程课件 第8章_索引视图(共35页).ppt 完整版Oracle11数据库教程课件 第9章_PLSQL编程基础(共59页).ppt 完整版Oracle11数据库...

    Oracle的ppt教学.zip

    orcale 11g的学习ppt,内容涵盖orcale的...第7章 查询.ppt 第8章 视图与索引.ppt 第9章 序列与同义词.ppt 第10章 PLSQL基本语法.ppt 第11章 存储过程与触发器.ppt 第12章 用户与权限.ppt 第13章 备份与恢复.ppt

    Oracle 12cR2 单实例 For linux作业指导书

    1.7 修改oracle用户环境变量 7 1.8 创建oracle安装目录 7 1.9 配置系统参数文件 8 1.10 配置ntp服务 8 第二章 图形界面安装 9 2.1 图形界面安装db 软件 9 2.2 dbca建库 18 2.3 netca配置监听 22 2.4 升级数据库 23 ...

    Oracle课件.pdf

    4. Oracle用户和权限 4.1用户和权限 4.2角色 第2章 SQL数据操作和查询 1. SQL简介 2. 查询 2.1查询结构 2.2查询顺序 . 2.3聚合函数 . 3. 创建表和约束 3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4....

    ASP.NET通用权限管理系统(FrameWork) 1.0.8源码版

    7)每个模块的每个栏目对应一个目录, 栏目的权限抽象分为(查看/新增/修改/删除/排序/打印/备用A/备用 8).目录里有一个web.config来进行目录文件权限配置,可直接将某个文件名设定到相对应的权限上. v1.0.8版更新记录 ...

    Oracle11g从入门到精通

    第7章 Oracle数据库管理操作 7.1 学会使用视图 7.1.1 增加安全性 7.1.2 隐藏数据的复杂性 7.1.3 实现命名简洁性和易读性 7.1.4 实现更改灵活性 7.2 实现记录的唯一性 7.2.1 用键实现 7.2.2 创建唯一索引 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Oracle中权限主要分为两种,系统权限和实体权限。  系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。  DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。  RESOURCE:...

    Oracle 10g应用指导

    第7章 子程序和触发器,包括函数、存储过程、包以及触发器等。对子程序的调用者权限、管道表函数、传递触发器标识:new和:old以及自治事务也给出了具体的解决方法。第8 章 LOB与面向对象的数据管理. 第9章 Oracle的...

    Oracle 11g 从入门到精通

    第7章 Oracle数据库管理操作 第8章 数据库用户管理 第9章 数据库空间管理 第10章 备份与恢复机制 第11章 控制文件及日志文件的管理 第13章 Oracle数据库的安全管理 第14章 留言板系统 第15章 新闻发布系统 ...

Global site tag (gtag.js) - Google Analytics