.NET 實現自訂ContextUser的Identity和Principal實現自訂使用者資訊,許可權驗證

來源:互聯網
上載者:User

.NET 實現自訂ContextUser的Identity和Principal

在傳統的.NET中,我們可以通過

User.Identity.Name;//擷取使用者名稱   
  
User.Identity.IsAuthenticated;//判斷使用者是否己驗證   
  
User.IsInRole("Admin");//判斷使用者是否含有指定角色  
但這樣的機制,在實際開發中,難以滿足開發需要.僅僅通過User.Identity.Name;擷取使用者名稱,和User.Identity.IsAuthenticated;判斷使用者是否驗證,是難以滿足需要。如何擷取使用者更多資訊,或者進行更詳細的許可權判斷。

我們可以通過自訂Identity和Principal進行實現!

/// <summary>   
  
/// 自訂目前使用者標識對象   
  
/// </summary>   
  
public class MyIdentity:IIdentity  
  
{  

#region 使用者屬性(可自訂更多資訊)   
  
    private string _userName;//使用者帳號   
  
    private string _departmnet;//使用者所在部門   
  
    private string _phone;//使用者聯絡電話  
 
    #endregion   
  
  
  
    /// <summary>   
  
    /// 使用者帳號   
  
    /// </summary>   
  
    public string UserName  
  
    {  
  
        get { return _userName; }  
  
    }  
  
    /// <summary>   
  
    /// 使用者所在部門   
  
    /// </summary>   
  
    public string Departmnet  
  
    {  
  
        get { return _departmnet; }  
  
    }  
  
    /// <summary>   
  
    /// 使用者電話   
  
    /// </summary>   
  
    public string Phone  
  
    {  
  
        get { return _phone; }  
  
    }  
  
    /// <summary>   
  
    /// 建構函式,根據使用者名稱   
  
    /// </summary>   
  
    /// <param name="UserName"></param>   
  
    public MyIdentity(string UserName)  
  
    {  
  
        //根據UserName查詢資料庫獲得以下資料   
  
        this._userName = "abc";  
  
        this._departmnet = "行政部";  
  
        this._phone = "123456";  
  
    }  
  
    /// <summary>   
  
    /// 建構函式,根據使用者ID   
  
    /// </summary>   
  
    /// <param name="UserID"></param>   
  
    public MyIdentity(int UserID)  
  
    {  
  
        //根據UserName查詢資料庫獲得以下資料   
  
        this._userName = "abc";  
  
        this._departmnet = "行政部";  
  
        this._phone = "123456";  
  
    }  
 
    #region 基本屬性   
  
    /// <summary>   
  
    /// 返回驗證方式   
  
    /// </summary>   
  
    public string AuthenticationType  
  
    {  
  
        get { return "Form"; }  
  
    }  
  
    /// <summary>   
  
    /// 是否驗證   
  
    /// </summary>   
  
    public bool IsAuthenticated  
  
    {  
  
        get { return true; }  
  
    }  
  
    /// <summary>   
  
    /// 返回使用者   
  
    /// </summary>   
  
    public string Name  
  
    {  
  
        get { return _userName; }  
  
    }  
 
    #endregion   
  
}  
/// <summary>   
  
/// 目前使用者安全上下文資訊   
  
/// </summary>   
  
public class MyPrincipal:IPrincipal  
  
{  
 
    #region 屬性   
  
    private IIdentity _identity;//使用者標識   
  
    private ArrayList _permissionList;//許可權列表  
 
    #endregion   
  
  
  
    /// <summary>   
  
    /// 返回使用者權限列表   
  
    /// </summary>   
  
    public ArrayList PermissionList  
  
    {  
  
        get { return _permissionList; }  
  
    }  
  
  
  
    /// <summary>   
  
    /// 擷取目前使用者標識   
  
    /// </summary>   
  
    public IIdentity Identity  
  
    {  
  
        get { return _identity; }  
  
    }  
  
    /// <summary>   
  
    /// 目前使用者是否指定角色(採用許可權值方式,此處返回false)   
  
    /// </summary>   
  
    /// <param name="role"></param>   
  
    /// <returns></returns>   
  
    public bool IsInRole(string role)  
  
    {  
  
        return false;//返回false   
  
    }  
  
    /// <summary>   
  
    /// 建構函式,使用者名稱構造   
  
    /// </summary>   
  
    /// <param name="UserName"></param>   
  
    public MyPrincipal(string UserName)  
  
    {  
  
        _identity = new MyIdentity(UserName);  
  
        //以下許可權根據UserName擷取資料庫使用者擁有的許可權值,此次省略   
  
        _permissionList = new ArrayList();  
  
        _permissionList.Add(1);  
  
        _permissionList.Add(2);  
  
        _permissionList.Add(3);  
  
        _permissionList.Add(4);  
  
        _permissionList.Add(5);  
  
    }  
  
    /// <summary>   
  
    /// 建構函式,使用者ID構造   
  
    /// </summary>   
  
    /// <param name="UserID"></param>   
  
    public MyPrincipal(int UserID)  
  
    {  
  
        _identity = new MyIdentity(UserID);  
  
        //以下許可權根據UserName擷取資料庫使用者擁有的許可權值,此次省略   
  
        _permissionList = new ArrayList();  
  
        _permissionList.Add(1);  
  
        _permissionList.Add(2);  
  
        _permissionList.Add(3);  
  
        _permissionList.Add(4);  
  
        _permissionList.Add(5);  
  
    }  
  
    /// <summary>   
  
    /// 判斷使用者是否擁有某許可權   
  
    /// </summary>   
  
    /// <param name="permissionid"></param>   
  
    /// <returns></returns>   
  
    public bool IsPermissionID(int permissionid)  
  
    {  
  
        return _permissionList.Contains(permissionid);  
  
    }  
  
}  
好,上面我們己實現了自訂,Identity和Principal。

我們可以在頁面這樣使用Identity。

//頁面中輸出自訂使用者資訊   
  
<%=(User.Identity as ContextUser.MyIdentity).Name %>//使用者帳號   
  
<%=(User.Identity as ContextUser.MyIdentity).Phone %>//使用者電話   
  
<%=(User.Identity as ContextUser.MyIdentity).Departmnet %>//使用者所在部門  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.