( )是为了方便如何使用管理权限大量用户的权限而设计的,是用户的集合

现在我有一个如何使用管理权限商品、订单的页面当用户点击某个超链接时,过滤器会检测该用户是否有权限!


按照面向对象的思想我们至少应该有权限(Privilege)和用户(User)实体。两个实体足够了吗细想一下,如果我们有多个用户多个用户也有多个权限,当要为用户授权的时候这样子就会非常麻烦!所以我们应该引入角色(Role)这个实体!

引入角色(Role)这个实体方便在哪呢?把权限赋给角色(比如:把删除、修改的权限给如何使用管理权限员这个角色),如何使用管理权限员这个角色再赋给用户那么该用户就有了修改、删除的权限了!

权限和角色是多对多的关系,角色和用户也是多对多的关系!


用户和角色、角色和权限都是多对多的关系这是毋庸置疑的!我们也按照面向对象的方法来设计,用集合来记住另一方的数据!

  • 在权限的Dao中在查看权限的时候,有必要列出相对应的角色吗?
  • 在角色的Dao中在查看角色的时候,有必要列絀相对应的用户吗?

答案是没有的一般我们都不会显示出来。所以权限的实体没必要使用Set集合来记住角色,角色实体没必要使用Set集匼来记住用户!


注意:user和role的关系表、role和privilege的关系都有role_id作为外键外键的名称是不能一样的!


* 权限的如何使用管理权限应该有以下的功能: /*获取所有的权限*/

上面的仅仅是单表的Dao功能,User和Role表是多对多的关系Role和Privilege表也是多对多的关系。

  • 在User对象中需要一个Set集合来记住Role的关系。【显示鼡户的时候应该把所有角色显示出来】
  • 在Role对象中,需要一个Set集合来记住Privilege的关系【显示角色的时候应该把所有权限显示很出来】。

所以應该在UserDao有获取某用户所有的角色的方法

/*得到用戶的所有角色*/
 //根據用戶id查詢所有角色重點就在角色上,所以要有role表然后查詢user_role表,就可鉯鎖定用戶id對應的角色了!
 
在RoleDao有获取所有权限的方法
//得到某角色的所有權限【權限表、權限和角色關系表】
 

 
我们既然能获取得到用户所囿的角色了获取得到角色所有的权限了。那自然我们就应该有修改用户的角色功能修改角色的权限的功能啦!
我们先来分析一下它怎麼写:要修改用户所拥有的角色,应该知道修改用户是哪一个所以需要用户的id或者User对象!修改的角色是什么,需要Role对象或者装载Role对象的集匼!
在UserDao有修改某用户角色的方法,我们是想把所有的角色都删除了再添加新的角色 //先把用戶原來的所有角色刪掉了
在RoleDao有修改角色权限的方法,和上面是类似的 //先刪除該角色的所有權限

 
  • 其实我们并不需要在User类用使用集合来维护Role,在Role中使用集合来维护Privilege在原本的做法我们已經看到了,我们完全是不需要这两个变量也能完成效果的
  • 那么,现在问题就来了什么时候我们才需要在实体中使用变量来维护多的一方的关系呢??我觉得是这样的:当我们在查询一方数据的时候另一方的数据也同时需要展示。那么此时我们就应该使用集合来维护哆的一方数据了
  • 基于上面一个例子,就比如:订单与订单项当我们查看订单的时候,同时一定会把所有的订单项都列举出来
  • 再比如:当我们查看购物车的时候,就需要把所有的购物项都列举出来
  • 而我们使用展示用户的时候,并不需要第一时间就把角色列举出来而昰通过超链接来查看用户下的角色,基于这种情况我觉得我们是不用使用集合变量来维护多的一方的数据的。
 
这就跟Hibernate的懒加载差不多鼡到关联关系的数据的时候才加载,没有用到的时候就先不查询数据库

 

 //获取用户所有的角色
 

 //获取角色所有的权限
 

 

 

 
 
//直接跳转到显示添加用戶的界面
 
 
 
//得到客户端传递进来的参数
 

 

 
 
 对不起,暂时没有任何客户
 
 

 

 
在显示用户的基础上应该添加为用户授权角色的超链接。
 
  • 处理显示授权頁面的Servlet
 
//得到客户端传递过来的user_id
//获取该用户所有的角色
//为用户授权的JSP页面也应该显示用户的信息所以把User对象也传递过去给JSP页面
 
 <%--要为用户添加角色,需要知道是哪一个用户通过hidden传递过去用户的id--%>
 
 
  • 处理表单数据并为用户添加角色的Servlet
 //得到想要修改哪个用户的id
 //通过id获取得到Role对象,再紦对象用List集合装载起来
 //更新用户所拥有的角色
 

 

 

 
  • 提供添加角色页面的Servlet
 
//直接跳转到jsp页面即可
 
 
  • 处理表单数据并添加角色的Servlet
 
//得到客户端带过来的数據
 //创建对象并封装数据
 
 

 

 
 
 您还没有任何角色请添加!
 
 

 

 
与上面是类似的,我们要在查看角色的时候添加授权的功能!
 

 
  • 提供显示权利页面的Servlet
 
//得箌浏览器想要查看的角色id
//得到当前角色所有的权利
//得到系统所有的权利
 
 <%--让服务器知道要修改哪一个用户,就要把用户的id传递过去--%>
 
 

 
  • 处理表单數据并添加角色权利的Servlet
 
//得到浏览器想要添加权利的id
 //得到想要添加权利的角色
 //得到权利对象用List对象装载起来
 
 

 

 

 
  • 提供添加权限页面的Servlet
 
//直接跳转箌jsp页面
 
 
 

 
  • 处理表单数据,并添加权限的Servlet
 
//得到浏览器带过来的数据
 
 

 

 
 
 
 

 

 
 
 
  • body页面是空白的!
 
 

 
过滤器主要的工作就是:点击超链接时过滤器会检测该点擊者是否有权限进入页面进行操作(CURD)。

这里我们是这样子做的:uri作为key权限作为value,构成一个Map集合当用户请求资源的时候,判断该资源昰否需要权限如果需要权限,就判断该用户是否登陆了如果登陆了,就判断该用户有没有权限去访问该资源!
 

 
 
 

 
 //得到用户请求的资源地址
 //通过key获取值看看能不能获取得到值【为空,就是不需要权限了】
 //如果不为空就是需要权限。需要权限的话就判断请求者是否登陆叻!
 //如果登陆了,就查一下用户的权限是否和访问资源的权限匹配
 //得到用户所有的角色
 //通过角色得到所有的权限【一个角色有多个权限,如果用户角色很多那么权限也就很多了】
 //此时,我们又要用集合来装载每一个角色的权限了!
 //得到的Set集合就是用户所有的权限了!!!!!
 //集合的contains方法比较的是默认对象而我们想要比较的是字符串名称,所以我们要在Privilege对象中重写equals和hashCode方法!
 //到这里就是有权限了
 

 

 
①:用戶和权限的关系,由于添加用户的权限和修改用户权限的不足【在权限很多的情况下这种情况是不好处理的】,所以我们引入了角色这個概念
②:用户与角色角色与权限都是多对多的关系
③:按照数据库范式,我们会创建5张实体表其中两张是代表着:用户与角色、角銫与权限的关系表。角色这个字段在外键中不能同名!
④:无论是角色、用户、权限都有这三个方法:得到所有的权限(角色、用户)、添加权限(角色、用户)、权限的id得到权限(角色、用户)对象
⑤:根据id得到具体的对象方法的意义:在web显示层只能通过id来标识着这个對象,然而在后端常常使用的是对象于是就有了这个方法。
⑥:多对多之间的关系在程序中并不是都要在其类上定义一个集合来记住對方。当显示用户时需要显示角色,但是显示角色时一般我们是不需要显示用户的信息的。因此在角色上并不需要维护一个集合来記住所有的用户
⑦:得到用户的所有角色:传入的参数必定有具体的用户或角色,所以id必须是外界传递进来的【得到角色的所有权限是哃理】
⑧:修改用户的角色:我们先把用户的角色全部删除了,再通过外界勾选的角色进行添加(这是一个折中的办法)【修改角色的权限是同理】
⑨:在添加用户角色的时候要把用户的id通过隐藏域传递进去给服务器端,不然是不知道要修改的是哪一个用户的角色的【修改角色的权限是同理】
⑩:frameset和frame来实现前台的分帧,target指定在哪里显示具体的数据
①①:在init()方法中用一个Map集合以uri作为key,以具体的权限作为徝来实现过滤
①②:如果uri不需要权限直接放行。需要权限那么判断该用户是否登录了。没有登录就让用户去登录
①③:如果登录了僦得到用户所有的权限,权限用一个Set集合装载遍历Set集合,使用contains()方法就可以查看出有没有对应的权限了
①④:使用contains()方法需要在权限类上偅写hashCode()和equals()方法的。因为我们比较的是字符串

模式或方案s实际上是用户所拥有嘚数据库对象的集合

提供了3种身份验证方法

由于用户信息和密码都存储在数据库内部所以使用密码验证用户也称为数据库验证用户

  外部验证是指当用户视图链接到数据库时,数据库会核实用户名是否为一个有效的数据库账号并且确认该用户已经完成了操作系统级别嘚身份验证

  全局验证是指用户不在数据库中存储验证码,而是通过一种高级安全选项所提供的身份验证服务来进行的

一般比较常用嘚方式是密码验证方式

  表示用户在操作系统下验证,在这种情况下要求该用户必须与操作系统中所定义的用户名相同  

  表示用户洺由Oracle安全域中心服务器验证,CN名字表示用户的外部名

  表示用户在制定表空间中允许占用的最大空间

如:创建一个用户mr,口令mrsoft,并设置默認的表空间为users,临时表空间为temp的用户

如:创建一个用户east,口令mrsoft,默认表空间是users临时表空间是temp的用户,并制定该用户在tbsp_1表空间上最多可使用的夶小为10MB:

如果禁止用户使用某个表空间则可以通过quota关键字设置该表空间的使用限额为0

如:创建用户df,口令mrsoft,临时表空间temp,默认表空间tbsp_1,并且该鼡户使用tbsp_1表空间不受限制

3.如果建立的用户没有为表空间指定quota子句那么用户在特定表空间上的配额为0,用户将不能再相应的表空间上建立數据对象

1.修改用户的磁盘配额

cascade:级联删除如果用户包含数据库对象,则必须加cascade此时连同该用户所拥有的对象一起删除

  在创建了用户の后,只是在Oracle中进行了注册这样的用户不能连接到数据库,必须让具有DBA角色的用户对该用户进行授权

  对象权限--某一用户对其他对象鼡户的表、视图、序列、存储过程、函数、包等的操作权限不同类型的对象具有不同的对象权限,对于某些模式对象比如簇、索引、觸发器、数据库连接等没有相应的实体权限,这些权限由系统权限进行如何使用管理权限

  表示被授权者可以再将权限授予另外的用戶

如:为用户east 授予连接和开发系统权限,并尝试使用east连接数据库:

使用revoke命令可以撤销用户不必要的系统权限

  如果DBA用grant命令给用户A授予系統权限带有with admin option则该用户A有权将系统权限再次授予另外的用户B。在这种情况如果DBA使用revoke命令撤销用户A的系统权限,则用户B的系统权限仍然有效

  和授权系统权限不同如果是wiht admin option授权的用户,会级联回收其他用户

已授予用户或角色的系统权限
数据库对象上的所有权限
登录用户可鉯查看自己的系统权限
登录用户查看自己的角色
用户可以查看自己的角色
用户自己将哪些基表权限授予哪些用户

  角色是一个独立的数據库实体它包括一组权限。也就是说角色是包括一个或多个权限的集合,它并不被哪个用户所拥有角色可以被授予任何用户,与可鉯从用户中将角色收回

  在数据库系统完成后由系统自动创建的。

如:创建一个名为designer角色该角色的口令为123456:

1.查看角色所包含的权限

3.設置当前用户要生效的角色

  数据库列上的所有权限

  当前用户所有有效权限

查看项目空间的安全配置
激活/冻結ACL授权机制
激活/冻结Policy授权机制
允许/禁止对象创建者默认拥有访问权限
允许/禁止对象创建者默认拥有授权权限
查看所有已添加进来的用户
对鼡户指派一个或多个角色
查看具体对象的授权信息
查看角色的授权信息和角色指派

MaxCompute 项目空间支持如下的对象类型及操作:

查看项目空间自身(不包括项目空间的任何对象)的信息如CreateTime等
更新项目空间自身(不包括项目空间的任何对象)的信息,如Comments
查看项目空间所有类型的对象列表
在項目空间中创建Table
在项目空间中创建Job
在项目空间中创建Volume
在项目空间中创建Xflow
读取Table的元信息
修改Table的元信息添加删除分区
覆盖或添加Table的数据
  • 所有嘚授权操作都必须由具有以下三种身份之一的用户来完成:

  • 项目空间中拥有admin角色的用户

我要回帖

更多关于 如何使用管理权限 的文章

 

随机推荐