Asp.Net Zero轻量级审核流设计

本文介绍在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通用审核流设计方式已经结束完毕,审核流在业务系统中也是比较复杂的设计,所以这里给大家提供的是设计思路,详细的业务代码还是要看实际需求。希望大家看完有所启发,如果有不太明白的可以在下方留言,我会详细解答。

转载于:https://www.cnblogs.com/william-xu/p/11133978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值