Asp.Net Zero輕量級審核流設計


復雜的業務系統中往往會集成工作流或審核流,但有些輕量及的業務系統對這些功能的需求並不大,有的系統甚至只需要審核功能就夠了。這里給大家介紹在Asp.Net Zero中通用輕量及審核流設計,功能具備審核權限、修改權限、查看權限等。

通用的審核流是在業務表中添加審核字段來實現,審核字段如下:

        /// <summary>
        /// 單據狀態
        /// </summary>
        public short State { get; set; }

系統中該字段統一為short類型,State定義在系統的枚舉中:

    public enum State
    {
        /// <summary>
        /// 新單
        /// </summary>
        New=1,
         
        /// <summary>
        /// 已審核
        /// </summary>
        Checked=2,

        /// <summary>
        /// 作廢
        /// </summary>
        Cancel=3
    }

審核權限、數據權限都應該根據該枚舉判斷。字段和枚舉添加完成后開始為業務模塊增加審核功能,普通的業務模塊通常只需要CRUD接口,而需要審核和數據權限的業務模塊應該添加審核和作廢接口。

普通業務模塊,檔案、字典等模塊應該具備的接口如下:

    public interface IAreaManagerAppService: IApplicationService
    {
        Task DeleteArea(EntityDto<int> input);

        Task<PagedResultDto<CreateOrEditAreaInput>> GetAreas(GetAreaInput input);

        Task<CreateOrEditAreaInput> GetAreaForEdit(NullableIdDto<int> input);

        Task CreateOrUpdateArea(CreateOrEditAreaInput input);

        Task<ListResultDto<AreaDto>> GetAllAreaWithLevel();
    }

包含審核、作廢的模塊接口:

    public interface ISomeoneClassAppService: IApplicationService
    {
        Task CreateOrUpdate(CreateOrEditInput input);

        Task Delete(EntityDto<int> input);

        Task<PagedResultDto<Output>> Get(GetInput input);

        Task<CreateOrEditInput> GetForEdit(NullableIdDto<int> input);

        Task Check(int id);

        Task Cancel(int id);
    }

審核需要分配角色權限,所以在審核接口的實現中應該加上權限標簽:

        [AbpAuthorize(AppPermissions.Pages_SomeoneModule_SomeoneClass_Check)]
        public async Task Check(int id)
        {
            var master = await _MasterRepository.FirstOrDefaultAsync(id);
            if (master.State == Convert.ToInt16(State.Checked))
            {
                throw new UserFriendlyException("單據已審核!");
            }
            if (master.State == Convert.ToInt16(State.Cancel))
            {
                throw new UserFriendlyException("單據已作廢!");
            }
            master.State = Convert.ToInt16(State.Checked);
            master.CheckerId = AbpSession.UserId.Value;
            await _MasterRepository.UpdateAsync(master);

            var details = await _DetailRepository.GetAllListAsync(_ => _.PID == master.Id);
       
       //do something
}

 審核流顯示效果,新增單據和沒有權限時審核、作廢功能應該禁用,也可以改為隱藏

已審核的單據在分配權限的情況下應該具備查看、刪除、作廢操作

未審核的單據在分配權限的情況下應該具備編輯、刪除、審核

 實現如下:

在新增修改組件按鈕組中加入審核按鈕

        <button type="button" class="btn btn-warning" (click)="check(data.id)"
          [disabled]="data.State!=1"><i class="fa fa-check"></i>審核</button>
        <button type="button" class="btn btn-danger" (click)="cancel(data.id)"
[disabled]="data.State!=2"><i class="fa fa-ban"></i>作廢</button>

在父組件table中加入操作:

      <a href="javascript:;" *ngIf="!record.isStatic && permission.isGranted('Pages.SomeoneModule.Class.Check') && record.State==1" (click)="check(record)">
          審核
      </a>
      <a href="javascript:;" *ngIf="!record.isStatic && permission.isGranted('Pages.SomeoneModele.Class.Cancel') && record.State==2" (click)="cancel(record)">
          作廢
      </a>

總結:到這里Asp.Net Zero通用審核流設計方式已經結束完畢,審核流在業務系統中也是比較復雜的設計,所以這里給大家提供的是設計思路,詳細的業務代碼還是要看實際需求。希望大家看完有所啟發,如果有不太明白的可以在下方留言,我會詳細解答。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM