关于操作权限

第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,并且选择录入人员组。

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

 

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

时间: 2024-09-29 07:39:16

关于操作权限的相关文章

Asp.Net中Excel操作权限的问题

近日在打开原来写的一个网页程序运行时,出现了Excel操作权限的问题,具体的说就是在代码中调用下面这段与Excel操作有关的语句时, Application curExcelApp = new ApplicationClass(); 提示权限不足,具体的提示内容如下: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005. 说明: 执行当前 Web 请求期间,出现未处理的异常.请

开启Win7管理员帐户 避开操作权限提示

出于安全考虑,Win7默认会将管理员帐户关闭,但是这样一来会给平时的操作带来不便.比如在删除系统盘中的某些文件时,经常会弹出当前帐户没有操作权限的提示.开启Win7管理员帐户的操作其它并不复杂,如果你的确很需要这项功能,并且能够保证系统安全的话,可以按照下面的方面来手动开启Win7管理员帐户. 点击开始按钮,鼠标右键点击"计算机",选择"管理".在弹出的"用户账户控制"窗口中点击"是",打开"计算机管理".

【OSS 最佳实践】OSS 操作权限控制

用户操作 OSS 时是需要根据账号的 AccessKeyId 和 AccessKeySecret (后续简称 AK 和 SK )进行权限验证的,这里的 AK 和 SK 包括有多种类型:主账号的 AK 和 SK .子账号的 AK 和 SK 以及 STS 生成的临时 AK . SK 和 Token .那么他们之间有什么区别呢?具体应该如何配置使用呢?本文将带大家一起认识相关概念. 1. 概念区别 主账号的 AK 和 SK 是主账号对应的权限标识,也就是说主账号的每对 AK和 SK 是拥有账号下的所有

脚本 windows 权限-windows管理员赋予某用户操作权限的脚本问题

问题描述 windows管理员赋予某用户操作权限的脚本问题 如果我需要写一个脚本管理员运行之后可以给user"C:Windows"写的权限,并且权限对目录下的子文件有效 解决方案 可以,用cacls命令,自己google下 解决方案二: cacls C:Windows /T /E /G user:W 解决方案三: 楼上的大神给出了答案

分享一个批量增加和移除用户对表的操作权限函数

最近一直有人在QQ群询问怎么设置一个用户对所有表的读权限等有关一次性对数据库或某个模式下所有表增加或移除某一个权限问题 1.对于数据库的所有表需要分多条grant 语句来实现 2.对于某一个模式下的所有表,9.0以前版本也只能通过多条grant语句来实现,而9.0以后则可以通过GRANT xxx ON ALL TABLES IN SCHEMA xxx TO xxx 来实现 3.revoke跟grant情况一下 其实这些我们可以通行守加几个管理函数来实现,封装一下,操作起来不管那个版本都是一样的

MySQL给用户加库操作权限

给用户增加操作权限 GRANT ALL PRIVILEGES ON `DB_NAME`.* TO 'USER_NAME'@'HOST' WITH GRANT OPTION; grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* to common_u

vss源代码管理下的FSO文件操作权限

问题描述 受VSS源代码管理,FSO文件操作就没权限了,怎么回事啊,必须要签出该文件才可以,未签出情况下就报错没权限 解决方案 解决方案二:签出?什么意思checkout?没有checkout时候,文件是只读的

MySQL给用户加库操作权限sql语句

语法如下  代码如下 复制代码 GRANT ALL PRIVILEGES ON `DB_NAME`.* TO 'USER_NAME'@'HOST' WITH GRANT OPTION; 例 grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利.  代码如下 复制代码 grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on t

使用c#对sql server 2008操作时如何用sql语句设置操作权限?

问题描述 c#中我用sqlconnection对象链接数据库之后,用sqlcommand对象对表中的数据进行操作,为什么只能在表中添加数据,但是不能修改和删除现有的数据?打开数据库.增加.修改.删除的代码如图,求高手指点! 解决方案