现在的位置: 首页 > 综合 > 正文

.NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证

2012年09月25日 ⁄ 综合 ⁄ 共 4164字 ⁄ 字号 评论关闭

.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 %>//用户所在部门  

 

抱歉!评论已关闭.