zoukankan      html  css  js  c++  java
  • 权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout

    权限系统设计实现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、表结构设计

    image

    2 程序设计

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

    3、UI设计

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    四、后述

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

     
     
     
  • 相关阅读:
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    how to use automapper in c#, from cf~
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3205093.html
Copyright © 2011-2022 走看看