组织架构

组织架构

本节开始我们要实现工作流,此工作流可以和之前的所有章节脱离关系,也可以紧密合并。

我们当初设计的项目解决方案就是可伸缩可以拆离,可共享的项目解决方案。所以我们同时要添加App.Flow文件夹

工作流的开始之前,我们必须有一个组织架构,我们做成无限动态级别树,因为之前的模块管理也是无限级别的

知识点:Easyui TreeGrid用法,根据组织架构读取架构下所有用户(with...as....)

穿越到模块管理的源码 有点雷同的Easyui TreeGrid的制作

复制代码
CREATE TABLE [dbo].[SysStruct](
    [Id] [varchar](50) NOT NULL,            --主键ID
    [Name] [varchar](50) NOT NULL,          --架构名称
    [ParentId] [varchar](50) NOT NULL,      --上级ID
    [Sort] [int] NOT NULL,                  --排序
    [Higher] [varchar](50) NULL,            --  备用
    [Enable] [bit] NOT NULL,                --是否启用
    [Remark] [varchar](500) NULL,           --说明
    [CreateTime] [datetime] NOT NULL,       --创建时间
 CONSTRAINT [PK_SysStruct] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[SysStruct]  WITH NOCHECK ADD  CONSTRAINT [FK_SysStruct_SysStruct] FOREIGN KEY([ParentId])
REFERENCES [dbo].[SysStruct] ([Id])
GO

ALTER TABLE [dbo].[SysStruct] NOCHECK CONSTRAINT [FK_SysStruct_SysStruct]
GO

ALTER TABLE [dbo].[SysStruct] ADD  CONSTRAINT [DF_SysStruct_Sort]  DEFAULT ((0)) FOR [Sort]
GO

ALTER TABLE [dbo].[SysStruct] ADD  CONSTRAINT [DF__SysStruct__Highe__3D2915A8]  DEFAULT ((0)) FOR [Higher]
GO

ALTER TABLE [dbo].[SysStruct] ADD  CONSTRAINT [DF_SysStruct_State]  DEFAULT ((1)) FOR [Enable]
GO

ALTER TABLE [dbo].[SysStruct] ADD  CONSTRAINT [DF_SysStruct_CreateTime]  DEFAULT (getdate()) FOR [CreateTime]
GO
复制代码

最终效果图

理论是无限级别的。这里我只做了3级

接下来我们关联SysUser和SysStruct的关系。并添加存储过程,这个存储过程很有用,sql没有递归,用with...as....语句最适合不过了,貌似2005版本以上才支持

 这是我的SysUser表

我们以后如果按组织架构流转。比如按总公司流转,那么我们根据总公司的ID就能找到无限树叶的所有用户了。

我以前习惯叫部门,所以存储过程的Dep就是现在的Strcut了

复制代码
USE [AppDB]
GO
/****** Object:  StoredProcedure [dbo].[P_Sys_GetUserByDepId]    Script Date: 03/21/2015 22:08:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[P_Sys_GetUserByDepId]
@DepId varchar(50)
as
begin

--读取角色所包含的用户
with CTE_Depart(Id ,Name ,ParentID )as
(
    select    a.Id ,a.Name ,a.Id  ParentID
    from    SysStruct  a
    union    all
    select    a.Id,a.Name ,b.ParentID 
    from    SysStruct a
            join CTE_Depart b on a.ParentID = b.Id 
)

 select    b.*,0 as flag
from    CTE_Depart a
        left join SysUser b  on a.id = b.DepId 
where    a.ParentID=@DepId and b.Id is not null


end 
复制代码

好了。没啥...

作者:YmNets
出处:http://ymnets.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

Asp.Net MVC

 
摘要: 本节开始我们要实现工作流,此工作流可以和之前的所有章节脱离关系,也可以紧密合并。我们当初设计的项目解决方案就是可伸缩可以拆离,可共享的项目解决方案。所以我们同时要添加App.Flow文件夹工作流的开始之前,我们必须有一个组织架构,我们做成无限动态级别树,因为之前的模块管理也是无限级别的知识点:Eas...阅读全文
posted @ 2015-03-22 15:23 ymnets 阅读(435) | 评论 (3) 编辑
 
摘要: 系列目录上次的探讨没有任何结果,我浏览了大量的文章和个别系统的参考!决定用Cache来做,这可能有点难以接受但是配合mvc过滤器来做效果非常好!由于之前的过滤器我们用过了OnActionExecuting这个方法来判断权限现在在方法被执行后我们用OnActionExecuted来监听用户的操作和刷新...阅读全文
posted @ 2014-07-23 09:19 ymnets 阅读(2612) | 评论 (14) 编辑
 
摘要: 系列目录基于web的网站在线统计一直处于不是很精准的状态!基本上没有一种方法可以确实的统计在线用户!Discuz!NT 在线用户功能算是做得比较好的!参考资料他的原理大致是根据用户的操作间隔来确定用户是否在线,也可以理解为操作日志,当系统扫描的日志间隔太长将被理解为用户离线,所以要不断的更新操作表和...阅读全文
posted @ 2014-07-21 11:31 ymnets 阅读(2068) | 评论 (5) 编辑
 
 
摘要: 系列目录我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能!服务器现在来向SQL2008R2插入1000000条数据吧declare @i int;set @i=0;while @i'+CONVERT(varchar,(@Rows*(@PageNo-1)))+' )'...阅读全文
posted @ 2014-06-16 09:47 ymnets 阅读(3362) | 评论 (28) 编辑
 
摘要: 我相信目前国内富文本编辑器中KindEditor 属于前列,详细的中文帮助文档,简单的加载方式,可以定制的轻量级。都是系统的首选 很多文章教程有kindeditor的使用,但本文比较特别可能带有,上传文件的缩略图和水印的源码阅读全文
posted @ 2014-05-19 16:44 ymnets 阅读(1861) | 评论 (5) 编辑
 
摘要: 系列目录注:阅读本文,需要阅读本系列的之前文章代码生成器下载地址(文章开头处)接下来我们建立数据库的表和各层的代码我们只需要两张表,文章列表(MIS_Article)和类别表(MIS_Article_Category)USE [AppDB]GO/****** Object: Table [dbo]...阅读全文
posted @ 2014-05-19 10:34 ymnets 阅读(1977) | 评论 (9) 编辑
 
摘要: 系列目录最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Android的基本开发构成,我还是会持续更新本系列的一些知识点的用法。说句实在话,我很佩服那些能连续好几年每个...阅读全文
posted @ 2014-05-15 09:33 ymnets 阅读(2088) | 评论 (9) 编辑
 
摘要: 系列目录注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双向验证单单的用js实现的前端验证是极其不安全的,所以本次我们来看看MVC上的自带的注解验证,自定义验证同样的MVC提供了一系列内置的数...阅读全文
posted @ 2014-03-31 15:35 ymnets 阅读(2756) | 评论 (16) 编辑
 
摘要: 系列目录文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示。这次我们演示利用swfupload多文件上传,项目上文件上传是比不可少的,大家这个心里都知道。主要提供给源码说明及下载最终效果图:SWFUpload的特点:1、用flash进行上传...阅读全文
posted @ 2014-03-17 14:47 ymnets 阅读(2751) | 评论 (9) 编辑
 
摘要: 系列目录这次我们来演示MVC3怎么显示RDL报表,坑爹的微软把MVC升级到5都木有良好的支持报表,让MVC在某些领域趋于短板我们只能通过一些方式来使用rdl报表。Razor视图不支持asp.net服务器控件,但是aspx可以,所以用户其实可以通过aspx视图模版来显示rdl报表或者水晶报表。我是有强...阅读全文
posted @ 2014-03-11 15:15 ymnets 阅读(3138) | 评论 (12) 编辑
 
摘要: 系列目录方便朋友获取一个开发框架,无论是开发还是学习用途将受益匪浅,出售此MVC4源码请勿讲源码打包做为二次出售您可以通过QQ729994997联系我。源码基本功能包括如下:(包含源码,数据库,数据库脚本,插入数据脚本)1.基于角色的权限管理系统2.附带一个文章管理系统实例3.附带基于Quartz任...阅读全文
posted @ 2014-03-06 17:27 ymnets 阅读(2621) | 评论 (15) 编辑
 
摘要: 系列目录我们的系统有时要扩展到其他国家,或者地区,需要更多的语言环境,微软提供了一些解决方案,原始我们是用js来控制的,现在不需要了。我们只要创建简单的资源文件,通过MVC的路由设置就可以轻松的进行语言中的切换。本节受益于:Asp.net MVC3 高级编程第121页。大家可以自行百度这本书,这应该...阅读全文
posted @ 2014-03-06 15:00 ymnets 阅读(2249) | 评论 (3) 编辑
 
摘要: 系列目录我们从第一节搭建框架开始直到二十七节,权限管理已经告一段落,相信很多有跟上来的园友,已经搭配完成了,并能从模块创建授权分配和开发功能了我没有发布所有源代码,但在14节发布了最后的一次源代码,之后的文章代码是完整的。注:以后不会发布打包的源代码,我发布文章是献给想学习MVC的朋友,并不是共享结...阅读全文
posted @ 2014-02-26 15:03 ymnets 阅读(2624) | 评论 (31) 编辑
 
摘要: 系列目录分配用户给角色,跟分配角色给用户操作是基本一致的。打开模块维护,展开SysRole模块添加一个操作码,并赋予权限设置好之后将权限授权给管理员,在SysRole的index添加操作码与js事件@Html.ToolButton("btnAllot", "icon-share", "分配用户", ...阅读全文
posted @ 2014-02-24 09:35 ymnets 阅读(3600) | 评论 (14) 编辑
 
摘要: 系列目录由于之前做了将权限赋给角色,还需要做将角色组赋给用户,和将用户赋给角色组,一个用户可以拥有多个角色组,一个角色组包含多个用户,打开模块管理,添加一个分配的操作码并在角色权限设置授权给他在SysUser的Index添加以下按钮@Html.ToolButton("btnAllot", "icon...阅读全文
posted @ 2014-02-21 11:26 ymnets 阅读(3513) | 评论 (17) 编辑
 
摘要: 系列目录这一节我们要着手建立系统管理员表,但发布之前,我先发布一个代码生成器给大家先用着。这个生成器是为这个项目而生的,理论不能用于其他项目,而且写得比较潦草,但能用下载地址有兴趣要生成器源码的在群里就能获取到,我已经上传到群文件,解压代码生成器打开App.CodeHelper.exe编辑最底部的数...阅读全文
posted @ 2014-02-20 14:14 ymnets 阅读(2526) | 评论 (16) 编辑
 
摘要: 系列目录过了个年回来,回顾一下,我们上次讲了角色管理,我们这一次来讲将权限授权给角色,这一节也是大家比较关心的。因为我们已经跑通了整个系统,知道权限的流转,我们先来看一张图这张图主要分要3块,角色组----系统模块----操作码授权选择角色组(表示要授权的角色,选择需要授权的模块,最后授权操作码。当...阅读全文
posted @ 2014-02-12 21:18 ymnets 阅读(4342) | 评论 (32) 编辑
 
摘要: 系列目录距离上次发布22讲已经有少许日子了,真是太抱歉,最近年关项目比较急,时间太紧,没有时间发布.请大家见谅接下来我们的目标是角色组管理角色组权限设置用户管理把角色组授权给用户给用户分配角色组所以最少我们还要讲多5讲才能结束这个管理系统,经过之前的样例程序,我们很熟悉这个套路了,如果你很喜欢这个系...阅读全文
posted @ 2014-01-11 23:14 ymnets 阅读(4185) | 评论 (33) 编辑
 
摘要: 本节演示了Easyui制作菜单,即无限级别树的做法,以及DataGrid之间的联动,我也是和大家一起学习,我也是Easyui的新手,如有不足,请大家见谅阅读全文
posted @ 2013-12-24 09:00 ymnets 阅读(3828) | 评论 (30) 编辑
 
摘要: 这一节我们来跑通整个系统,验证的流程,通过AOP切入方式,在访问方法之前,执行一个验证机制来判断是否有操作权限(如:增删改等) 原理:通过MVC自带筛选器,在筛选器分解路由的Action和controller来验证是否有权限。阅读全文
posted @ 2013-12-11 00:01 ymnets 阅读(5753) | 评论 (33) 编辑
 
摘要: 系列目录不知不觉到20讲,真是漫长的日子,可惜最近工作挺忙,要不可以有更多的时间来更新,多谢大家的一路支持.如果你觉得好,记得帮我点击推荐^-^我们在之前已经插入一些真实数据,其中包含了一个用户和样例程序SysSample的权限,并实现了用户的登录。但有的朋友对表还是有疑惑,通过下面的linq查询,...阅读全文
posted @ 2013-12-04 21:15 ymnets 阅读(4237) | 评论 (18) 编辑
 
摘要: 系列目录我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了把我们之前的表更新到EF中去登录在Account控制器,所以我们要添加Account的Model,BLL,DALAccountModel我们已经创建好了,下面是DAL和BLL的类using ...阅读全文
posted @ 2013-12-03 20:35 ymnets 阅读(4712) | 评论 (13) 编辑
 
摘要: 系列目录这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流程,免得大家后天雾里来雾里去首先我再解释一些表,SysUser和SysRole表不用解释了。SysRoleSysUser:这个是角色和用户的对应表 一个角色可以对应多个用户,一个用户可以对应多个角色SysModule...阅读全文
posted @ 2013-12-01 11:41 ymnets 阅读(4841) | 评论 (14) 编辑
 
摘要: 使20行的代码精简成2行,利用LINQ动态排序,中间用到一些反射,需要一些反射的基本知识阅读全文
posted @ 2013-11-28 08:32 ymnets 阅读(4686) | 评论 (13) 编辑
 
摘要: 系列目录我们上一节建了数据库的表,但我发现很多东西还未完善起来,比如验证码,我们先做好验证码吧,验证码我们再熟悉不过了,为了防止恶意的登录,我们必须在登录页面加入验证码,下面我将分享一个验证码,这个是用C#画的,原理是,生成一个随机4位数,将其保存为session或者是cookie形式,将用户输入的...阅读全文
posted @ 2013-11-27 21:34 ymnets 阅读(4500) | 评论 (27) 编辑
 
摘要: 系列目录这节我们说下权限系统的特点,本系统采用的是MVC4+EF5+IOC 接口编程的架构,其中的权限树用的是DWTree,功能上做到灵活,授权操控细致,权限可以细到按钮级别 ,为了部署简单,导致设计和编码上也是比较复杂该系统主要功能如下: 自定义操作动作(如增加、删除、修改、审核等,不再是以前见过...阅读全文
posted @ 2013-11-25 23:04 ymnets 阅读(4808) | 评论 (20) 编辑
 
摘要: 实际上是Json格式化问题,我们应该在返回json的时候进行格式化,我们需要重写系统的JsonResult类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web.Mvc;using System.Text.RegularExpressions;using System.Web;using System.Web.Script.Serialization;namespace App.Common{ public class ToJsonResult ...阅读全文
posted @ 2013-11-23 19:24 ymnets 阅读(2570) | 评论 (7) 编辑
 
摘要: 不知不觉已经过了13讲,(本来还要讲多一讲是,数据验证之自定义验证,基于园友还是对权限这块比较敢兴趣,讲不讲验证还是看大家的反映),我们应该对系统有一个小结。首先这是一个团队开发项目,基于接口编程,我们从EasyUI搭建系统的框架开始,开始了一个样例程序对EasyUI的DataGrid进行了操作,并实现Unity的注入到容器,使程序的性能大大提升,代码质量上升,更佳利于单元测试,使用日志和异常坚固系统稳定性。阅读全文
posted @ 2013-11-23 17:55 ymnets 阅读(4889) | 评论 (14) 编辑
 
摘要: 上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来。 首先我们在App.Common类库中创建一个通用类ResultHelper,这个类里面写了,获取一个GUID,获取当前时间,处理字符串等操作,虽然我们目前要用到的一个就是获取GUID但是以后我们可能还要用到别的,所以我都把他放进入了 然后在App.Admin创建一个核心文件夹,Core,放入LogHandler这个类是主要是写入日志,避免在每次都要实例化这个类,我把他封装起来,大家一看就知道。 然后修改Controller的Create方法,代码如下一一给出。阅读全文
posted @ 2013-11-22 22:55 ymnets 阅读(5551) | 评论 (21) 编辑
 
摘要: 上一节我们讲了如何捕获异常和记录日志,这一节我们讲,没有捕获的或者忘记捕获的异常包括404错误等,我们统一处理这个异常。这一讲是利用 Application_Error 捕获所有异常阅读全文
posted @ 2013-11-22 22:11 ymnets 阅读(3969) | 评论 (14) 编辑
 
摘要: 系列目录系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的。系统的异常需要被捕获,而不是将系统出错显示出来给用户就不了了知。我们需要异常日志不断改进系统。我们老说用户,我们还没有用户权限的表,所以我们在H...阅读全文
posted @ 2013-11-20 22:44 ymnets 阅读(6135) | 评论 (30) 编辑
 
摘要: 系列目录似乎我们需要更多的模块了,我们有一个样例程序,可以帮助我们以后的系统开发做很多对照,我们稍后还有系统日志和系统异常的记录,这时浏览发生了困难,我们这一节来完成一个大家比较喜欢的东西吧,系统菜单栏,我们系统左边预留了一个位置,那里存放菜单,菜单在这里主要可以分为两种, 1. outlook模...阅读全文
posted @ 2013-11-19 23:02 ymnets 阅读(9082) | 评论 (82) 编辑
 
摘要: 系列目录在第八讲中,我们已经做到了怎么样分页。这一讲主要讲增删改查。第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下。这讲主要是,制作漂亮的工具栏,虽然easyui的datagrid已经自带可以设置工具栏,我们还是要提取出来,为以后权限控制做更好的准备。前端代码没有逻辑结果,这也许是我写...阅读全文
posted @ 2013-11-19 08:34 ymnets 阅读(7991) | 评论 (62) 编辑
 
摘要: 系列目录上一节我们讲了,DataGrid获取数据的一些用法,这一节讲DataGrid的分页DataGrid将传递“当前页码”“每页条数”控制器获取参数之后交给BLL层处理逻辑和分页,返回总页数和当前页的数据最后交给DataGrid处理课外:从此次前端的处理速度我看出,没有以前的JQGrid控件的处理...阅读全文
posted @ 2013-11-18 21:31 ymnets 阅读(6875) | 评论 (39) 编辑
 
摘要: 系列目录没有源码的同学跳到第六讲下载源码再来。我们需要漂亮的UI,不要系统自动生成的垃圾UI。我们在大数据面前,我们要减少页面的压力,不要在页面遍历List我们选择Easyui的DataGrid最为本系统的表格展示效果本节知识点:根据DataGrid json格式在controller制作json格...阅读全文
posted @ 2013-11-17 10:29 ymnets 阅读(6672) | 评论 (13) 编辑
 
摘要: 系列目录Unity 2.x依赖注入(控制反转)IOC,对于没有大项目经验的童鞋来说,这些都是陌生的名词,甚至有些同学还停留在拉控件的阶段。您可以访问http://unity.codeplex.com/releases得到最新版本的Unity现在。当然,如果您在您的visual studio 中安装了...阅读全文
posted @ 2013-11-16 20:42 ymnets 阅读(8968) | 评论 (43) 编辑
 
摘要: 系列目录上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系。我们把Controllers分离出来了BLL层和DAL层BLL专注于业务上的处理DAL专注于数据访问层的处理而Controller跟清楚的与View交互我们上一讲已经在EF添加了一个实体SysSample下面我们创建I...阅读全文
posted @ 2013-11-16 10:24 ymnets 阅读(8098) | 评论 (22) 编辑
 
摘要: 系列目录进行本次文章之前,我们可能需要补充一些基本知识。首先我们系统是基于接口编程的,我们为什么要使用借口编程,其实这是应用了一种企业应用架构模式Repository(仓储) 一种用来封装存储,读取和查找行为的机制,它模拟了一个对象集合。 支持在领域和数据映射层之间实现彻底分离和单向依赖关系的目...阅读全文
posted @ 2013-11-16 09:36 ymnets 阅读(9017) | 评论 (20) 编辑
 
摘要: 系列目录良好的登录页面是系统的唯一入口,良心说,我是很难做出漂亮的登录界面,所以有点违背本文的标题,因为我不是一个美工。汗..!第二讲我已经发布了源码,我们添加一个Account空控制器,虽然后台未实现,但是以后我们就要用到了。添加index视图,以下代码@{ Layout = nul...阅读全文
posted @ 2013-11-15 22:16 ymnets 阅读(8838) | 评论 (16) 编辑
 
摘要: 系列目录开始,我们有了一系列的解决方案,我们将动手搭建新系统吧。用户的体验已经需要越来越注重,这次我们是左右分栏,左边是系统菜单,右边是一个以tabs页组成的页面集合,每一个tab都可以单独刷新和关闭,因为他们会是一个iframe工欲善其事必先利其器。需要用到以下工具。Visual Studio 2...阅读全文
posted @ 2013-11-15 21:28 ymnets 阅读(13297) | 评论 (62) 编辑
 
摘要: 演示地址暂时关闭 第2讲源码下载访问密码 ae54 最新代码生成器+17讲源码下载 访问密码 15d3 SwfUpload在MVC4下多文件上传密码: 访问密码 0fc2 也可以有偿获取一份最新源码联系QQ:729994997价格500-----------------...阅读全文
posted @ 2013-11-14 23:34 ymnets 阅读(22404) | 评论 (49) 编辑
原文地址:https://www.cnblogs.com/Leo_wl/p/4358099.html