程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 信息系統開發平台OpenExpressApp - 使用CSLA類庫實現用戶管理

信息系統開發平台OpenExpressApp - 使用CSLA類庫實現用戶管理

編輯:關於.NET

在《信息系統開發平台OpenExpressApp - 用戶權限模塊設計》中對RBAC以及在OEA中的涉及進行了簡要介紹,權限的基礎必須存在用戶,實現自定義用戶管理,CSLA已經提供一些類庫來繼承使用,本篇簡單的講解一下如何使用CSLA類庫實現用戶管理以及登錄,下一篇再介紹功能權限部分。

用戶管理模塊

這個其實就是一個用戶字典管理,包括用戶名、登錄名和密碼,沒有考慮證書等功能,由於目前實現比較簡單,User類庫編寫按照以往類庫就行了,這裡就不單獨講了。

實現用戶主體Principal

主體實現登錄和退出功能,登錄成功後返回用戶,否則為非法用戶。CSLA實現了一個類BusinessPrincipalBase,我們只要從它繼承下來就可以很方便的實現OEA的Principal對象,這個對象在登錄窗口時調用調用。

Principal代碼如下:

public class OEAPrincipal : BusinessPrincipalBase
  {
    private OEAPrincipal(IIdentity identity)
      : base(identity)
    { }
    public static bool Login(string username, string password)
    {
      var identity = OEAIdentity.GetIdentity(username, password);
      if (identity.IsAuthenticated)
      {
        OEAPrincipal principal = new OEAPrincipal(identity);
        Csla.ApplicationContext.User = principal;
        return true;
      }
      else
      {
        Csla.ApplicationContext.User = new UnauthenticatedPrincipal();
        return false;
      }
    }
    public static void Logout()
    {
      Csla.ApplicationContext.User = new UnauthenticatedPrincipal();

實現用戶標識Identity

通過用戶名和密碼去服務器端查詢後返回用戶標識對象,在這裡會把角色也返回過來,角色部分功能權限blog中再介紹。

/// <summary>
  /// 注意:防止重名,User增加Code區分唯一性,查詢時通過Code查詢,同時返回Code和Name
  /// </summary>
  [Serializable()]
  public class OEAIdentity : CslaIdentity
  {
    #region Factory Methods
    internal static OEAIdentity GetIdentity(string username, string password)
    {
      return DataPortal.Fetch<OEAIdentity>(new UsernameCriteria(username, password));
    }
    public User User { get; set; }
    private OEAIdentity()
    { /* require use of factory methods */ }
    #endregion
    #region Data Access
    public new OrgPositions Roles { get; private set; }
    private void DataPortal_Fetch(UsernameCriteria criteria)
    {
      User = UserList.Get(criteria.Username, criteria.Password);
      if (null != User)
      {
        base.Name = User.Name;
        base.IsAuthenticated = true;
        this.Roles = OrgPositions.GetList(User.Id); // list of roles from security store
      }
      else
      {
        base.Name = string.Empty;
        base.IsAuthenticated = false;
        this.Roles = null;
      }
    }
    #endregion
  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved