关于操作权限

简介:

第1章 引言

1.1 编写目的

详细说说操作权限并且在sshpermissions中是如何处理及使用操作权限的。

1.2 关于操作

这里所说的操作权限是指在我们工作中,比如张三“添加”了一条员工的记录,李四“修改”了哪条信息,管理中对某个角色进行了“授权”。就是我们在系统中所看到的所有的操作。

1.3 Shiro中如何处理

Shiro 将权限定义为一个规定了明确行为或活动的声明。这是一个在应用程序中的原始功能语句,仅此而已。权限是在安全策略中最低级别的构造,且它们明确地定义了应用程序只能做“什么”。

它们从不描述“谁”能够执行这些动作。

一些权限的例子:

l  打开文件

l  浏览’/user/list’页面

l  打印文档

l  删除’jsmith’用户

规定“谁”(用户)允许做“什么”(权限)在某种程度上是分配用权限的一种习惯做法。这始终是通过应用程序数据模型来完成的,并且在不同应用程序之间差异很大。

例如,权限可以组合到一个角色中,且该角色能够关联一个或多个用户对象。或者某些应用程序能够拥有一组用户,且这个组可以被分配一个角色,通过传递的关联,意味着所有在该组的用户隐式地获得了该角色的权限。

如何授予用户权限可以有很多变化——应用程序基于应用需求来决定如何使其模型化。

Wildcard Permissions

上述的权限例子,“打开文件”、“浏览’/user/list’页面”等都是有效的权限语句。然而,将这些解释为自然语言字符串,并判断用户是否被允许执行该行为在计算上是非常困难的。

因此,为了使用易于处理且仍然可读的权限语句,Shiro 提供了强大而直观的语法,我们称之为WildcardPermission。

Simple Usage

假设你想要保护到贵公司打印机的访问,使得某些人能够打印到特定的打印机,而其他人可以查询当前有哪些工作在队列中。

一个极其简单的方法是授予用户”queryPrinter”权限。然后你可以检查用户是否具有queryPrinter 权限通过调用:

subject.isPermitted(“queryPrinter”)

这(很大程度)相当于

subject.isPermitted( new WildcardPermission(“queryPrinter”))

但远不只这些。

简单的权限字符串可能在简单的应用程序中工作的很好,但它需要你拥有像”printPrinter”,”queryPrinter”,”managePrinter”等权限。你还可以通过使用通配符授予用户”*”权限(赋予此权限构造它的名字),这意味着他们在整个应用程序中拥有了所有的权限。

但使用这种方法不能说用户拥有“所有打印机权限”。由于这个原因,Wildcard Permissions(通配符权限)支持多层次的权限管理。

Multiple Parts

通配符权限支持多层次或部件(parts)的概念。例如,你可以通过授予用户权限来调整之前那个简单的例子。

printer:query

在这个例子中的冒号是一个特殊字符,它用来分隔权限字符串的下一部件。

在该例中,第一部分是权限被操作的领域(打印机),第二部分是被执行的操作(查询)。上面其他的例子将被改为:

printer:print

printer:manage

对于能够使用的部件是没有数量限制的,因此它取决于你的想象,依据你可能在你的应用程序中使用的方法。

Multiple Vaules

每个部件能够保护多个值。因此,除了授予用户”printer:print”和”printer:query”权限外,你可以简单地授予他们一个:

printer:print, query

它能够赋予用户print 和query 打印机的能力。由于他们被授予了这两个操作,你可以通过调用下面的语句来判断用

户是否有能力查询打印机:

subject.isPermitted(“print:query”)

该语句将会返回true。

All Values

如果你想在一个特定的部件给某一用户授予所有的值呢?这将是比手动列出每个值更为方便的事情。同样,基于通

配符的话,我也可以做到这一点。若打印机域有3 个可能的操作(query,print 和manage),可以像下面这样:

printer:query, print, manage

简单点变成这样:

printer:*

然后,任何对”printer:XXX”的权限检查都将返回true。以这种方式使用的通配符比明确地列出操作具有更好的尺度,如果你不久为应用程序增加了一个新的操作,你不需要更新使用通配符那部分的权限。

最后,在一个通配符权限字符串中的任何部分使用通配符token 也是可以的。例如,如果你想对某个用户在所有领域(不仅仅是打印机)授予”view”权限,你可以这样做:

*:view

这样任何对”foo:view”的权限检查都将返回true。

第2章 如何处理

2.1 编写标签

为什么使用自定义标签?

在页面上不可能引用非常多的shiro标签,这样的页面会显得很乱,而且非常不容易记,对于开发人中来说无谓的复制粘贴都是很没有必要的。

标签位置?

到WEB-INF目录下找tgEasyuiTag.tld。

如何使用?

在jsp页面上引入

<%@ taglib uri=”http://com.tgyt.com.cn/tag/easyui” prefix=”tgEasyui” %>

比如新增操作:

<tgEasyui:easyuiButton iconCls=”icon-add” method=”newItem()” permission=”action:add”  operationName=”新增”/>

这个是对easyui的封装,如果使用其它的ajax框架可以针对自己的进行二次封装。

action:add是什么?

这个是在资源管理和操作管理中分别设置的别名。

2.2 处理程序

if(!"".equals(this.permission)){
            Subject subject = SecurityUtils.getSubject();
            if(subject.isPermitted(this.permission)){
                try {
                    if(EASYUIBUTTON.equals(type)){
                        pageContext.getOut().println(createEasyuiButton());
                    }else if(IMAGEBUTTON.equals(type)){
                        pageContext.getOut().print(createImageButton());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

第3章 实例

3.1 场景描述

管理人员可以处理全部的操作及资源,而录入人员只能处理新增和修改的操作,其它的工作录入人员都不能处理。

添加录入人员角色:

录入人员,主要负责录入和修改,不具备其它权限

 

在管理组下边新增录入人员角色:

 

将组和角色绑定:

 

点击角色管理,给角色分配资源和操作:

给录入人员分配对人员的操作管理

 

分配完资源之后分配操作:

 

保存结果。

在人员管理里加入用户testluru,并且选择录入人员组。

登录之后可以看到只有人员管理资源,资源下只有新增和修改的操作。

 

同理可以根据自己的系统配置相应的资源及操作管理。

目录
相关文章
|
SQL JSON 数据可视化
权限开发手册,数据权限和接口权限配置
权限开发手册,数据权限和接口权限配置
745 0
权限开发手册,数据权限和接口权限配置
|
17天前
|
Linux 数据安全/隐私保护
权限
Linux权限管理是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:所有者(owner)、群组(group)和其他(others)。 每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文件和文件夹进行更改、读取和删除。群组是一组用户,他们可以共享文件和文件夹的权限。其他用户是除所有者和群组以外的其他用户。 Linux使用三个主要的权限:读、写和执行。读权限允许用户查看文件或文件夹的内容,写权限允许用户更改文件或文件夹的内容,执行权限允许用户运行文件或文件夹中的程序。是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:
14 1
|
8月前
|
存储 关系型数据库 MySQL
Mysql 用户管理(创建、删除、改密、授予权限、取消权限)
Mysql 用户管理(创建、删除、改密、授予权限、取消权限)
217 0
|
6月前
|
资源调度 前端开发 数据库
权限 | 前端控制权限
啊,我们经常做权限控制,控制菜单,控制按钮功能等,但是在一些特殊情况下不能够由后端来做权限控制,那就只能前端来做啦。
|
缓存 网络协议 安全
权限提升
权限提升
180 0
权限提升
|
存储 Linux 数据安全/隐私保护
特殊权限| 学习笔记
快速学习特殊权限
特殊权限| 学习笔记
cetnos6下特殊权限
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396740 ...
1146 0
|
前端开发 数据安全/隐私保护
|
Linux 安全 Windows