2.使用安全特性配合Forms验证进行安全操作。
PrincipalPermissionAttribute可以配合Forms验证进行基于角色或用户的安全验证,该特性不能用于程序集级别。它的作用范围可以是类或具体的方法。来看一个简单的示例。
[PrincipalPermission(SecurityAction.Demand,User="Notus")] public class Test : BasePage { private void Page_Load(object sender, System.EventArgs e) { try { this.sayHello(); this.sayHello2(); } catch(Exception ex) { Response.Write(ex.ToString()); } }
private void sayHello() { Response.Write("hello world!"); }
private void sayHello2() { Response.Write("hello PrincipalPermissionAttribute!"); }
#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); }
/// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion
}
注意这个例子一开始是作用于整个类的,生成后执行,如果当前用户不是Notus,就会发生异常System.Security.SecurityException,提示对主体权限的请求失败。反之,则可以顺利访问,并输出两个hello world!,注意是两个。现在的安全作用范围是整个类。
接下来我们改一下特性的作用范围。将特性声明移到sayHello2方法上面,重新编译后运行,就会发现程序在运行到sayHello2方法后抛出了System.Security.SecurityException。这说明现在安全作用范围缩小到了方法级别。
该特性可以通过设置User和Role来进行基于用户和角色的安全保护。另外其使用的第一个参数是SecurityAction枚举,该枚举设置了具体的保护级别或措施。像我们现在使用的这个Demand,是要求调用堆栈中的所有高级调用方都已被授予了当前权限对象所指定的权限。
下面是msdn给的示例
示例
下面的示例说明可以如何以声明方式使用 PrincipalPermission 要求当前用户是 Bob 并且属于 Supervisor 角色。 [PrincipalPermissionAttribute(SecurityAction.Demand, Name="Bob", Role="Supervisor")]下面的示例说明如何要求当前用户的身份是 Bob,与角色成员条件无关。 [PrincipalPermissionAttribute(SecurityAction.Demand, Name="Bob")] 下面的示例说明如何仅要求对用户进行身份验证。 [PrincipalPermissionAttribute(SecurityAction.Demand, Authenticated=true)]
再要说一下的是,这里面的User和Role是可以和Forms验证集成的,据此,我们可以在一些重要的类或方法中使用PrincipalPermissionAttribute,以将自己的程序武装到家。
而实际上,该特性的作用远不止这些,更详细的信息可以查阅msdn。
出处:蓝色理想
责任编辑:冰点的冰蓝色
上一页 使用Forms验证存储用户自定义信息 下一页
◎进入论坛网络编程版块参加讨论
|