Asp.Net Zero轻量级审核流设计
复杂的业务系统中往往会集成工作流或审核流,但有些轻量及的业务系统对这些功能的需求并不大,有的系统甚至只需要审核功能就够了。这里给大家介绍在Asp.Net Zero中通用轻量及审核流设计,功能具备审核权限、修改权限、查看权限等。
通用的审核流是在业务表中添加审核字段来实现,审核字段如下:
/// <summary>
/// 单据状态
/// </summary>
public short State { get; set; }
系统中该字段统一为short类型,State定义在系统的枚举中:
public enum State
{
/// <summary>
/// 新单
/// </summary>
New=, /// <summary>
/// 已审核
/// </summary>
Checked=, /// <summary>
/// 作废
/// </summary>
Cancel=
}
审核权限、数据权限都应该根据该枚举判断。字段和枚举添加完成后开始为业务模块增加审核功能,普通的业务模块通常只需要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通用审核流设计方式已经结束完毕,审核流在业务系统中也是比较复杂的设计,所以这里给大家提供的是设计思路,详细的业务代码还是要看实际需求。希望大家看完有所启发,如果有不太明白的可以在下方留言,我会详细解答。
Asp.Net Zero轻量级审核流设计的更多相关文章
- 审核流(2)流程设计-SNF.WorkFlow功能使用说明--SNF快速开发平台3.1
流程设计 图形化的流程设计,更方便.直观 1.打开“流程设计“程序,如上.点击”新建“如下: 2.红色部分为必填项,审批对象是选择要审批的程序菜单,单据名称是在审核流流转时用于提示的单据名称,还要选择 ...
- 审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1
下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进 ...
- 审核流(1)SNF.WorkFlow审核流简介--SNF快速开发平台3.1
本项目是的在Spring.Net.Framework 平台之上进行研发.SNF.WorkFlow审核流是一款完全自主知识产权研发的为软件项目. 审核流基本概念:什么是审核流? 审核流:两个或两个以上的 ...
- 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式
连表查询都用Left Join吧 最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...
- 如何利用redis来进行分布式集群系统的限流设计
在很多高并发请求的情况下,我们经常需要对系统进行限流,而且需要对应用集群进行全局的限流,那么我们如何类实现呢. 我们可以利用redis的缓存来进行实现,并且结合mysql数据库一起,先来看一个流程图. ...
- 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[上篇]
<200行代码,7个对象--让你了解ASP.NET Core框架的本质>让很多读者对ASP.NET Core管道有了真实的了解.在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分 ...
- ASP.NET 系列:RBAC权限设计
权限系统的组成通常包括RBAC模型.权限验证.权限管理以及界面访问控制.现有的一些权限系统分析通常存在以下问题: (1)没有权限的设计思路 认为所有系统都可以使用一套基于Table设计的权限系统.事实 ...
- Knockout.js, Asp.Net MVC and Bootstrap 前端设计
原文地址:http://ddmvc4.codeplex.com/ 原文名称:Design and Develop a website using ASP.NET MVC 4, EF, Knockout ...
- [Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍
AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...
随机推荐
- 【VS开发】组播(多播)的C程序实战
每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂. 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看到结果, 就不 ...
- windows下的句柄利用
什么是句柄 维基百科:在程序设计中,句柄(handle)是Windows操作系统用来标识被应用程序所建立或使用的对象的整数.其本质相当于带有引用计数的智能指针.当一个应用程序要引用其他系统(如数据库. ...
- Apache——开启个人用户主页功能
个人主页功能分为不加密和加密两种 不加密: 先来建立几个用户,我这是建了两个 例:命令为:useradd qiyuan 然后输入:passwd qiyuan,改一下密码 我们看一下家目录下面: 已经 ...
- 多线程基础知识---sleep和wait区别
1.sleep()是Thread类的静态方法:wait()是Object的成员方法 2.sleep()可以在任何地方使用;wait()只能在同步方法或代码块中使用
- SSRF绕过姿势
0x00 什么是SSRF? SSRF(Server-Side Request Forgery,服务器端请求伪造):是一种由攻击者构造形成由服务器端发起请求的一个漏洞. SSRF 攻击的目标是从外网无法 ...
- Kick Start 2019 Round H. Elevanagram
设共有 $N = \sum_{i=1}^{9} A_i$ 个数字.先把 $N$ 个数字任意分成两组 $A$ 和 $B$,$A$ 中有 $N_A = \floor{N/2}$ 个数字,$B$ 中有 $N ...
- 【LOJ】#3088. 「GXOI / GZOI2019」旧词
LOJ#3088. 「GXOI / GZOI2019」旧词 不懂啊5e4感觉有点小 就是离线询问,在每个x上挂上y的询问 然后树剖,每个节点维护轻儿子中已经被加入的点的个数个数乘上\(dep[u]^{ ...
- mybatis-plus代码生成器两版(全部生成+部分生成)
mybatis-plus代码生成器两版(全部生成+部分生成) 一次性生成全部文件 package com.layuicms.erp.utils; import java.util.List; impo ...
- 使用tqdm实现下载文件进度条
1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从 ...
- 10.Bash的安装
10.Bash的安装本节提供了在 Bash支持的不同系统上的基本安装指导.本版本支持 GNU操作系统,几乎每个 UNIX版本,以及几个非 UNIX 系统,例如 BeOS 和 Interix.还有针对 ...