权限访问控制设计

一、前言

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

二、需求分析

关于权限系统的文章网上多如牛毛,很多都是基于角色的访问控制(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 + knockout去实现。实际上之前我就实现的差不多,最近也一直在花时间更新完善。
这个权限系统太大了,这一篇肯定是说不完的,我这里就先总体上说了一下设计思路,接下每一篇写具体实现,一篇一个功能,大家期待我的下一篇吧。

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 knockoutjs开发的实现的。
很多朋友私信我一些问题,所以干脆我创建了一个技术交流QQ群:328510073,欢迎大家来交流。

 

转载于:https://www.cnblogs.com/wala-wo/p/5119310.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于页面布局的一些注意点

1、在div布局不好解决的地方不用犹豫,使用table! 2、div使用百分比大小时如果其又受其他元素的固定高宽影响的话overflow无效,加入position:absolute即可解决 3、当有dtd头存在时height的百分比单位不起…

jquery $.trim()方法使用介绍

$.trim(str)的作用是去掉字符串首尾空格 $.trim(str) 返回&#xff1a;string&#xff1b; 说明&#xff1a;去掉字符串首尾空格。 示例&#xff1a; 先看个错误代码&#xff1a; <input type"text" name"" id"results" value""/&…

卸载失败_Windows 10可能的新功能-自动卸载失败的补丁更新

Windows 10作为Windows最新报告&#xff0c;微软正在向Windows 10添加一项新的恢复功能&#xff0c;该功能旨在自动检测更新安装后启动失败的时间。在用户不必做任何事情的情况下&#xff0c;将卸载违规更新&#xff0c;这个操作可以引导系统再次运行。根据在线发布的支持文档&…

用java发送邮件(黄海已测试通过)

/*** java发送带附件的邮件* 周枫* 2013.8.10*/ package com.dsideal.Util; import javax.mail.*; import javax.mail.internet.*;import java.util.*; import javax.activation.*;public class SendMail {private static String host "smtp.qq.com"; // smtp服务器…

MS SQL 不常用但却十分有用的一些语法

创建自定义数据类型 CREATE TYPE ADDRESS FROM VARCHAR(30) NOT NULL数据量大了的情况下修改表某字段类型方法 ALTER TABLE TEST ALTER COLUMN TEST VARCHAR(80) 注意&#xff1a;如果要包含一些数据如numeric数据类型转换成为Integer数据类型时数据将自动取整&#xff0c;所以…

iOS开发CoreAnimation解读之三——几种常用Layer的使用解析

iOS开发CoreAnimation解读之三——几种常用Layer的使用解析 一、CAEmitterLayer CAEmitterLayer是CoreAnimation框架中的粒子发射层&#xff0c;在以前的一片博客中有详细的介绍和范例&#xff0c;这里不再重复&#xff0c;地址如下&#xff1a; 粒子效果的应用和火焰范例&…

中文格式_常见中文编码格式

中文编码主要有以下四种&#xff1a;GB2312简体中文编码&#xff0c;一个汉字占用2个字节&#xff0c;在大陆是主要的编码方式。当文章/网页中包含繁体中文、日文、韩文等时&#xff0c;这些内容可能无法被正确编码。BIG5繁体中文编码&#xff0c;主要在台湾地区使用。GBK支持简…

广播发送与接收

//发送端 #include <iostream> #include <stdio.h> #include <string.h> #include <winsock2.h> using namespace std; int main() { WSADATA wsaData; short version MAKEWORD(2,0); WSAStartup(version,&wsa…

征服英语的30个坏习惯

作者&#xff1a;李阳 亲爱的正在征服英语的战友们&#xff0c;你们辛苦了&#xff01; 我总结了20多年来我自己以及我周围的成功人士们风风雨雨的生活和奋斗历程&#xff0c;得出了如下结论&#xff1a; 英语的好习惯决定英语学习的最终成败&#xff01; 这些好习惯包括&…

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用 一、引言 在移动开发中&#xff0c;通常会用到一些小型的数据库进行数据管理。SQLite是一款十分小巧便捷的数据库&#xff0c;在iOS开发中&#xff0c;原生框架也对其有很好的支持。 二、SQLite常用语句 数据库…

SQL Server之字符串函数

以下所有例子均Studnet表为例&#xff1a; 计算字符串长度len&#xff08;&#xff09;用来计算字符串的长度 select sname ,len(sname) from student字符串转换为大、小写lower() 用来将一个字符串转换为小写&#xff0c;upper() 用来将一个字符串转换为大写 select lower(I …

vue重复路由_vue后台管理系统,动态添加路由,路由重复

使用vue-router的addRoutes动态添加路由时&#xff0c;子路由重复了。点击‘职工类型’&#xff0c;路由地址变为‘http://localhost:8123/#/workerType’&#xff0c;显示的却是‘职工列表’点击‘职工列表’&#xff0c;路由地址变为‘http://localhost:8123/#/workerList’&…

Makefile文件编写

Makefile的一般格式如下&#xff1a; target&#xff1a; components TAB rule 第一行表示的是依赖关系.第二行是规则. 一个通用的Makefile例子&#xff0c;本人觉得还可以&#xff0c;所以就推荐一下 ob file1 #ob为一变量&#xff0c;以后如果要改变源程序…

tonardo做web服务器播放大视频内存泄露问题的解决

之前为了实现websocket来完成网页的推送&#xff0c;所以使用了tonardo作为web服务器。但是如果网页中含有视频插件的话&#xff0c;特别是经常要播放大视频的话&#xff0c;在linux环境下&#xff0c;经常发现 python进程会莫名其妙的死掉。通过内存检测命令动态查看&#xff…

yii框架源码分析之创建controller

使用yii框架的url路径一般形如hostname/?rxxxx/xxxx/xxxx&sdfsdsfdsf我们可以看到有时会使用protected目录下的controller&#xff0c;有时会使用module中controller&#xff0c;具体是如何处理的呢&#xff0c;请看如下的分析&#xff1a;以下代码摘自yii框架核心代码%Yi…

Android通用流行框架大全

Android通用流行框架大全 1. 缓存 名称描述DiskLruCacheJava实现基于LRU的磁盘缓存2.图片加载 名称描述Android Universal Image Loader一个强大的加载&#xff0c;缓存&#xff0c;展示图片的库Picasso一个强大的图片下载与缓存的库Fresco一个用于管理图像和他们使用的内存的库…

Windows Shell 编程 第六章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987951】...

第六章 快捷方式的最短路径 Windows Shell允许存储任何对象的引用到系统范围内的任何地点。例如&#xff0c;当你从一个文件夹拖拽可执行程序到另一个文件夹时&#xff0c;鼠标自动改变形状给出除拷贝和移动文件之外的第三种选择。 除非你确定&#xff0c;否则可执行文件是不能…

python素材和代码_python之文件和素材

11.1 打开文件open函数open(name[,mode[,buffering]])>>>f open(rC:\text\somefile.txt)11.1.1 文件模式open函数中模式参数的常用值r读模式w写模式a追加模式b二进制模式读/写模式通过在模式参数中使用U参数能够在打开文件时使用通用的换行符支持模式&#xff0c;在这…

类库开发的设计准则

MSDN:类库开发的设计准则转载于:https://www.cnblogs.com/Joetao/articles/2095307.html

ShowMsg函数妙用

为什么80%的码农都做不了架构师&#xff1f;>>> 在对DedeCMS做2次开发的时候可能提示信息会经常用到&#xff0c;为了方便在此将ShowMsg方法提取出来&#xff0c;使用方法&#xff1a;ShowMsg&#xff08;“提示信息”&#xff0c;“进行跳转的页面URL”&#xff0…