using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Public.System.Collections;
using Public.Framework.Permissions;
namespace Public.Framework.Identity
{
/// <summary>
/// 为需要有效身份或身份信息的 Web 页面提供基本的操作以使这些 Web 页面可以方便实现身份验证。
/// </summary>
public class SecurityPage : Public.System.Web.UI.PageEx, ISecurityControl
{
#region Implementation for ISecurityControl
/// <summary>
/// 当前访问者信息。
/// </summary>
protected IdentityInfo identityInfoVisitor; // 当前 Web 页面的访问者信息
/// <summary>
/// 当前身份是否有效。
/// </summary>
protected bool boolIsIdentityValid; // true : 当前身份有效
/// <summary>
/// 是否需要一个有效的身份。
/// </summary>
protected bool boolRequireValidIdentity; // true : 需要一个有效的身份
/// <summary>
/// 所需要的全部操作权限。
/// </summary>
protected int [] intRequiredOperations; // 访问此 Web 页面所需要的全部操作权限
/// <summary>
/// 所需要的其中一个操作权限。
/// </summary>
protected int [] intRequiredOneOperations; // 访问此 Web 页面所需要的其中一个操作权限
/// <summary>
/// 所需要的全部数据权限。
/// </summary>
protected int [] intRequiredDatas; // 访问此 Web 页面所需要的全部数据权限
/// <summary>
/// 所需要的其中一个数据权限。
/// </summary>
protected int [] intRequiredOneDatas; // 访问此 Web 页面所需要的其中一个数据权限
/// <summary>
/// 执行安全验证之后的安全验证的结果。
/// </summary>
protected SecurityValidateArgs argsValidateResult; // 表示验证结果
/// <summary>
/// 执行安全验证失败后想要采取的动作。
/// </summary>
protected ValidateFailAction validateFailAction; // 验证失败时的动作
/// <summary>
/// 安全验证事件,当验证访问者身份和权限时发生。
/// </summary>
public event SecurityValidateEventHandler SecurityValidate;
/// <summary>
/// 当验证身份失败并指定了 ValidateFailAction.CauseEvent 时发生。
/// </summary>
public event SecurityValidateEventHandler ValidateFail;
#endregion
#region Implementation for ISecurityControl
/// <summary>
/// 验证访问者身份的有效性。
/// </summary>
/// <param name="autoredirect"> 当身份无效时是否自动重定向 Web 页面。 </param>
/// <param name="alloperations"> 所需要的全部操作权限。 </param>
/// <param name="oneoperations"> 所需要的其中一个操作权限。 </param>
/// <param name="alldatas"> 所需要的全部数据权限 </param>
/// <param name="onedatas"> 所需要的其中一个数据权限 </param>
/// <returns> 当访问者身份有效时返回 true,否返回 false。 </returns>
public bool ValidateVisitorIdentity( bool autoredirect, int [] alloperations, int [] oneoperations, int [] alldatas, int [] onedatas)
{
if ( ! boolRequireValidIdentity)
{
return true ;
}
if (identityInfoVisitor == null )
{
identityInfoVisitor = IdentityInfo.GetCurrentSessionVisitor();
}
if ( ! (boolIsIdentityValid = ! (identityInfoVisitor == null || ! identityInfoVisitor.IsValid())))
{
if (autoredirect || boolRequireValidIdentity) SecurityControl.RedirectPage(SecurityControl.PageUrls.ValidateIdentity);
return false ;
}
if (alloperations != null && ! IsHoldOperations(alloperations))
{
return false ;
}
if (oneoperations != null && ! IsHoldOneOperation(oneoperations))
{
return false ;
}
if (alldatas != null && ! IsHoldDatas(alldatas))
{
return false ;
}
if (onedatas != null && ! IsHoldOneData(onedatas))
{
return false ;
}
return true ;
}
/// <summary>
/// 在执行安全验证时引发 SecurityValidate 事件。
/// </summary>
/// <param name="e"> 包含事件数据的 SecurityValidateArgs。 </param>
protected virtual void OnSecurityValidate(SecurityValidateArgs e)
{
argsValidateResult = e;
if (SecurityValidate != null )
{
SecurityValidate( this , e);
}
if (e != null && ! e.Result) // 验证失败
{
if (IsFailAction(ValidateFailAction.CauseEvent))
{
if (ValidateFail != null )
{
ValidateFail( this , e);
}
}
if (IsFailAction(ValidateFailAction.HideControl))
{
Visible = false ;
}
// if (IsFailAction(ValidateFailAction.DisabledControl))
// {
// // 不支持
// }
if (IsFailAction(ValidateFailAction.ShowMessage))
{
ShowMessage = SecurityControl.ValidateFailMessage;
}
if (IsFailAction(ValidateFailAction.RedirectPage))
{
SecurityControl.RedirectPage(SecurityControl.PageUrls.ValidateFail,
SecurityControl.ValidateFailMessage, SecurityControl.PageUrls.PreviousUrl);
}
if (IsFailAction(ValidateFailAction.ThrowException))
{
throw new Exception(SecurityControl.ValidateFailMessage);
}
}
}
/// <summary>
/// 在页初始化开始时引发 System.Web.UI.Page.PreInit 事件。
/// </summary>
/// <param name="e"> 包含事件数据的 System.EventArgs。 </param>
protected override void OnPreInit(EventArgs e)
{
ValidateVisitor();
base .OnPreInit(e);
}
#region Implementation for ISecurityControl
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Public.System.Collections;
using Public.Framework.Permissions;
namespace Public.Framework.Identity
{
/// <summary>
/// 为需要有效身份或身份信息的 Web 页面提供基本的操作以使这些 Web 页面可以方便实现身份验证。
/// </summary>
public class SecurityPage : Public.System.Web.UI.PageEx, ISecurityControl
{
#region Implementation for ISecurityControl
/// <summary>
/// 当前访问者信息。
/// </summary>
protected IdentityInfo identityInfoVisitor; // 当前 Web 页面的访问者信息
/// <summary>
/// 当前身份是否有效。
/// </summary>
protected bool boolIsIdentityValid; // true : 当前身份有效
/// <summary>
/// 是否需要一个有效的身份。
/// </summary>
protected bool boolRequireValidIdentity; // true : 需要一个有效的身份
/// <summary>
/// 所需要的全部操作权限。
/// </summary>
protected int [] intRequiredOperations; // 访问此 Web 页面所需要的全部操作权限
/// <summary>
/// 所需要的其中一个操作权限。
/// </summary>
protected int [] intRequiredOneOperations; // 访问此 Web 页面所需要的其中一个操作权限
/// <summary>
/// 所需要的全部数据权限。
/// </summary>
protected int [] intRequiredDatas; // 访问此 Web 页面所需要的全部数据权限
/// <summary>
/// 所需要的其中一个数据权限。
/// </summary>
protected int [] intRequiredOneDatas; // 访问此 Web 页面所需要的其中一个数据权限
/// <summary>
/// 执行安全验证之后的安全验证的结果。
/// </summary>
protected SecurityValidateArgs argsValidateResult; // 表示验证结果
/// <summary>
/// 执行安全验证失败后想要采取的动作。
/// </summary>
protected ValidateFailAction validateFailAction; // 验证失败时的动作
/// <summary>
/// 安全验证事件,当验证访问者身份和权限时发生。
/// </summary>
public event SecurityValidateEventHandler SecurityValidate;
/// <summary>
/// 当验证身份失败并指定了 ValidateFailAction.CauseEvent 时发生。
/// </summary>
public event SecurityValidateEventHandler ValidateFail;
#endregion
#region Implementation for ISecurityControl
/// <summary>
/// 验证访问者身份的有效性。
/// </summary>
/// <param name="autoredirect"> 当身份无效时是否自动重定向 Web 页面。 </param>
/// <param name="alloperations"> 所需要的全部操作权限。 </param>
/// <param name="oneoperations"> 所需要的其中一个操作权限。 </param>
/// <param name="alldatas"> 所需要的全部数据权限 </param>
/// <param name="onedatas"> 所需要的其中一个数据权限 </param>
/// <returns> 当访问者身份有效时返回 true,否返回 false。 </returns>
public bool ValidateVisitorIdentity( bool autoredirect, int [] alloperations, int [] oneoperations, int [] alldatas, int [] onedatas)
{
if ( ! boolRequireValidIdentity)
{
return true ;
}
if (identityInfoVisitor == null )
{
identityInfoVisitor = IdentityInfo.GetCurrentSessionVisitor();
}
if ( ! (boolIsIdentityValid = ! (identityInfoVisitor == null || ! identityInfoVisitor.IsValid())))
{
if (autoredirect || boolRequireValidIdentity) SecurityControl.RedirectPage(SecurityControl.PageUrls.ValidateIdentity);
return false ;
}
if (alloperations != null && ! IsHoldOperations(alloperations))
{
return false ;
}
if (oneoperations != null && ! IsHoldOneOperation(oneoperations))
{
return false ;
}
if (alldatas != null && ! IsHoldDatas(alldatas))
{
return false ;
}
if (onedatas != null && ! IsHoldOneData(onedatas))
{
return false ;
}
return true ;
}
/// <summary>
/// 在执行安全验证时引发 SecurityValidate 事件。
/// </summary>
/// <param name="e"> 包含事件数据的 SecurityValidateArgs。 </param>
protected virtual void OnSecurityValidate(SecurityValidateArgs e)
{
argsValidateResult = e;
if (SecurityValidate != null )
{
SecurityValidate( this , e);
}
if (e != null && ! e.Result) // 验证失败
{
if (IsFailAction(ValidateFailAction.CauseEvent))
{
if (ValidateFail != null )
{
ValidateFail( this , e);
}
}
if (IsFailAction(ValidateFailAction.HideControl))
{
Visible = false ;
}
// if (IsFailAction(ValidateFailAction.DisabledControl))
// {
// // 不支持
// }
if (IsFailAction(ValidateFailAction.ShowMessage))
{
ShowMessage = SecurityControl.ValidateFailMessage;
}
if (IsFailAction(ValidateFailAction.RedirectPage))
{
SecurityControl.RedirectPage(SecurityControl.PageUrls.ValidateFail,
SecurityControl.ValidateFailMessage, SecurityControl.PageUrls.PreviousUrl);
}
if (IsFailAction(ValidateFailAction.ThrowException))
{
throw new Exception(SecurityControl.ValidateFailMessage);
}
}
}
/// <summary>
/// 在页初始化开始时引发 System.Web.UI.Page.PreInit 事件。
/// </summary>
/// <param name="e"> 包含事件数据的 System.EventArgs。 </param>
protected override void OnPreInit(EventArgs e)
{
ValidateVisitor();
base .OnPreInit(e);
}
#region Implementation for ISecurityControl