1、Copy 创建并返回当前权限的相同副本。
2、Demand 如果调用堆栈上的内容不满足权限对象所指定的权限内容,则会在运行时引发SecurityException。该方法可以让当前代码不会被其他的恶意代码所利用。
3、Intersect 创建并返回一个权限,该权限是当前权限和指定权限的交集。
4、IsSubsetOf 确定当前权限是否为指定权限的子集。
5、Union 创建一个权限,该权限是当前权限与指定权限的并集。
在上面列出的方法中,Demand方法是最常用也是最重要的方法。Demand方法会对当前方法的所有调用者进行检查以确定它们是否有足够的权限访问以指定的方式访问特定的资源(通常的检查方式是从调用堆栈上最新的调用方法开始通过执行完全的堆栈遍历来满足安全条件,但堆栈遍历不是必须的,PrincipalPermission.Demand就没有进行堆栈遍历),如果检查失败的话,Demand方法会抛出SecurityException异常,只有没有任何异常抛出的情况下,Demand方法才成功返回。
接着我们来讨论PrincipalPermission类,这里就需要我们前面所谈到principal对象了,在PrincipalPermission类的实例执行Demand方法时,实际上是在判断当前的principal对象是否匹配给定PrincipalPermission对象,如果不匹配的话,就抛出SecurityException。另外,Demand方法还可以用来强行让principal对象的identity验证通过,以便能不抛出异常,进行正常的操作。
下面的代码片断简要地说明了如何使用principalpermission对象:
String user1 = "Abbott"; String role1 = "StraightMan"; PrincipalPermission PrincipalPerm1 = new PrincipalPermission(user1, role1); String user2 = "Costello"; String role2 = "FunnyMan"; PrincipalPermission pp = new PrincipalPermission(user2, role2); PrincipalPerm1.Union(pp).Demand();
上面的代码说明了如何使用合并两个principalpermission对象,在合并之后,如果用户是StraightMan角色的Abbott或是FunnyMan角色的Costello,那么Demand将会成功返回。
以上就是基于角色的安全性中所需要用到的基础类和一些示例代码,希望大家能够从上面的内容中粗窥.NET安全性的门堂,能更好的应用.NET安全性来开发安全的程序。
文章来源于领测软件测试网 https://www.ltesting.net/