权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout (一)

一、前言

之前的博客一直都还没写到框架的实现及权限系统,今天开始写我的权限系统,我以前做过的项目基本上都有权限管理这个模块,但各个系统都会有一些不太一样,有些简单点,有些稍微复杂一点,一句话,我们做的系统都离不开这个权限系统。所以网上很多人尝试做一个通用的权限系统,不评论他们做的怎么样,只是说在网上能找到的直接能用的应该不多,适用的并且能集成到项目中的就更少了,所以还是考虑自己做一个,不一定很通用,但足够自己用的权限系统。

二、需求分析

关于权限系统的文章网上多如牛毛,很多都是基于角色的访问控制(RBAC)设计。但是发现完全实现RBAC的理论其实不一定好用,我想做一款适合自己的。所以首先我们必要明确我们要去实现哪些东西。

1、权限资源 
    a.菜单权限  经理和业务员登陆系统拥有的功能菜单是不一样的 
    b.按钮权限  经理能够审批,而业务员不可以 
    c.数据权限  A业务员看不到B业务员的单据 
    d.字段权限  某些人查询客户信息时看不到客户的手机号或其它字段

2、用户,应用系统的具体操作者,我这里设计用户是不能直接分配权限的,必须要分配一个角色,角色中再分配权限,如果某个用户权限比较特殊,可以为他专门建一个角色来应用解决,因为如果用户也可以分配权限系统就会复杂很多。

3、角色,为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,以上所有的权限资源都可以分配给角色,角色和用户N:N的关系。

4、机构,树形的公司部门结构,国内公司用的比较多,它实际上就是一个用户组,机构和角色N:N的关系,机构和用户也设计成N:N的关系,也就是说有时候一个用户可以从属于两个部门,这种情况在我们客户需求中的确都出现过。

当然除了上面提到的主要对象还包括以下对象

5、菜单

6、按钮

7、授权代码 以前我做的项目中控制数据权限有以下两种: 
    a.用部门编码来控制,只能查询到自己所属部门的数据 
    b.用项目编码来控制,只能查询到自己所属项目的数据。 
这样就有一个问题,我到底要用什么字段来控制数据权限呢,所以我们就设计了一个授权代码,如果你是用机构来控制数据权限,那么你可以把授权代码建成跟机构一样的树,如果用项目编码控制,可以把它建成项目树,用其它字段控制都一样,所以会比较灵活,也把机构或项目解放出来了。

8、数据字典

9、系统参数

10、日志查询 登陆日志、操作日志(xx人xx时间对xx对象做了xx操作 自定义的)、系统日志(系统运行错误记录等 log4net输出的)

三、设计实现

1、表结构设计

2 程序设计

我还是采用mvc4.0 + web api + easyui + knouckout去实现。实际上之前我就实现的差不多,最近也一直在花时间更新完善。 
这个权限系统太大了,这一篇肯定是说不完的,我这里就先总体上说了一下设计思路,接下每一篇写具体实现,一篇一个功能,大家期待我的下一篇吧。

3、UI设计

不多说了,先上图吧,我在第一篇博客中贴过以前的版本,最近也有一些更新,再贴一次吧,这次截图比较详细点,也配了一些文字的说明介绍。

功能1:菜单导航 
菜单导航】1:包括新增修改删除功能,直接在grid中编辑 

【菜单导航】2:选择图标 

【菜单导航】3:选择页面按钮 定义这个功能有只些按钮

【菜单导航】4:管理按钮库 增删改 

功能2:组织结构 
【组织结构】1:图形化的树结构,可以新增编辑删除节点 

【组织结构】2:编辑节点 

【组织结构】3:设置角色 

功能3:授权代码 
【授权代码】树形grid 可以增添编辑删除 

功能4:角色管理 
【角色管理】1:直接在grid中 增添编辑删除 

【角色管理】2:点编辑权限弹出角色极限窗口,点击选择菜单权限

【角色管理】3:编辑按钮权限,grid中只会出现菜单权限中选中的行,每个功能有哪些按钮在菜单中已定义好,这里只要勾选按钮即可 

【角色管理】4:编辑数据权限 可以多选,但只有一个默认值,该角色新增的业务单据的授权代码为默认的授权代码。 

【角色管理】5:编辑字段权限 grid中只会出现菜单权限中选中的行,直接在允许或拒绝中输入字段名,多个字段用逗号隔开 

【角色管理】6:点击管理成员,弹出此窗口 

【角色管理】7:成员管理 点击添加按钮 

功能5:用户管理 
【用户管理】1:左边机构可以过滤,直接在grid中增删改查用户 

【用户管理】2:设置机构 可多选,这里机构录入的太多了,出现了滚动条,少些会好看点。 

【用户管理】3:设置角色 可多选 

【用户管理】4:用户设置 用户登陆后的一些配置信息,比如指定用户的桌面,默认的项目,不同的系统可能会有不同的需求,所以这里设计可添加删除的,右上角下拉出来的[个人设置]页面也指向这里的数据

功能6:数据字典 
【数据字典】1:左边类别树可过滤,左边是树形grid,可以有层级关系,直接在grid中编辑 

【数据字典】2:点击管理类别,类别可在弹出的grid中增删改查 

功能7:系统参数 
【系统参数】直接grid中编辑,设计了一个是否可编辑字段,只能编辑 是否可编辑为true的参数 

功能8:操作日志 
【操作日志】1:登陆日志 

【操作日志】2:业务操作记录 

【操作日志】3:系统日志 

【操作日志】4:系统日志 查看系统日志 

四、后述

如果大家感兴趣,就在右下角帮我【推荐】一下吧,谢谢大家了。我接下来就按照功能列表一篇一篇的来写,下一篇就先开始写菜单管理。 
这里整个系统都是采用我的zephyr.net框架开发,应用mvc4.0 webapi easyui knouckoutjs开发的实现的。
很多朋友私信我一些问题,所以干脆我创建了一个技术交流QQ群:328510073,欢迎大家来交流。

 
 

权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout的更多相关文章

  1. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(四)授权代码维护

    一.前言 权限系统设计中,授权代码是用来控制数据访问权限的.授权代码说白了只是一树型结构的数据,没有什么其它的业务意义.那么这个页面的功能也就非常简单授权代码维护:新增.修改.删除授权代码数据. 二. ...

  2. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(三)图形化机构树

    一.前言 组织机构是国内管理系统中很重要的一个概念,以前我们基本都是采用数据列表的形式展现,最多只是采用树形列表展现.虽然够用,但是如果能做成图形化当然是最好不过了.这里我不用任何图形控件,就用最原始 ...

  3. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(二)菜单导航

    一.前言 上篇博客中已经总体的说了一下权限系统的思路和表结构设计,那接下来我们就要进入正文了,先从菜单导航这个功能开始. 二.实现 这个页面基本不用什么需求分析了,大家都很明白,不过在这个页面要多维护 ...

  4. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(一)

    一.前言 之前的博客一直都还没写到框架的实现及权限系统,今天开始写我的权限系统,我以前做过的项目基本上都有权限管理这个模块,但各个系统都会有一些不太一样,有些简单点,有些稍微复杂一点,一句话,我们做的 ...

  5. 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(五)框架及Web项目的组件化

    一.组件化印象 1.先给大家看一张截图 如果我告诉大家,这就是一个web管理系统发布后的所有内容,你们会不会觉得太简洁了,只有一个web.config.一个Global.asax文件,其它的都是dll ...

  6. MVC4 + WebAPI + EasyUI + Knockout-授权代码维护

    我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(四)授权代码维护 一.前言 权限系统设计中,授权代码是用来控制数据访问权限的.授权代码说白了只是一树型结构的数据 ...

  7. ASP.NET MVC4.0+ WebAPI+EasyUI+KnockOutJS快速开发框架 通用权限管理系统

    1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性高.有利软件 ...

  8. SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout

    一)经过多年的实践不断优化.精心维护.运行稳定.功能完善: 能经得起不同实施策略下客户的折腾,能满足各种情况下客户的复杂需求. 二)编码实现简单易懂.符合设计模式等理念: 上手快,见效快.方便维护,能 ...

  9. 建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

    框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性 ...

随机推荐

  1. UIAppDelegate介绍

    #import "GLAppDelegate.h" @implementation GLAppDelegate // 当应用程序启动完毕的时候就会调用(系统自动调用) - (BOO ...

  2. Codeforces 113A-Grammar Lessons(实现)

    A. Grammar Lessons time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  3. CreateMutex

    C++ API CreateMutex 找出当前系统是否已经存在指定进程的实例.假设没有则创建一个相互排斥体.CreateMutex()函数可用来创建一个有名或无名的相互排斥量对象. HANDLE C ...

  4. 快速构建Windows 8风格应用6-GridView数据控件

    原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...

  5. linux大杂烩

    linux: 进入hbase后不能移动光标和删除  Options-Session Options -- Terminal --右边的Terminal中选择linux然后点击OK就好了

  6. Android总结的基本机制监控事件

    研究上午Android底层机制事件监视器,例如下面的摘要: 内核驱动监控硬件状态和行为,由uevent机制将事件发送到用户空间: 通过用户空间UeventObserver从内核监控uevent,处理. ...

  7. js获取最近几天的日期(转载)

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. js判断浏览器类型(手机和电脑终端)

    工作中经常会用到通过js来判断浏览器的功能!今天这里通过js来判断浏览器是来自移动设备还是pc设备! 代码如下: var browser={ versions:function(){ var u = ...

  9. viewstate cookie和session原理回顾

    --个人理解会存在些错误仅供参考!!! ----浏览器保持会话状态原理 用户发送一次请求,服务器端会检索报文中是否存在sessionid不存在,就分配一个写到cookie当中,存在浏览器的缓存中,当再 ...

  10. [转载]LVS快速搭建教程

    LVS配置教程 作者:oldjiang 一.前言 相信专程来读此文的读者对LVS必然有一定的了解,首先看图: 毋庸置疑,Load Balancer是负载调度器,由它将网络请求无缝隙调度到真实服务器,至 ...