2019独角兽企业重金招聘Python工程师标准>>>

特别声明:

提供的源代码已经包含了 AppBoxPro 的全部源代码,用 VS2012 打开项目后,直接 Ctrl+F5 可以运行起来(默认使用VS自带的LocalDB数据库)。

FineUIPro是商业程序,仅包含v1.7.0公测版的DLL;当然你也可以自行把 FineUIPro 换成 FineUI(开源版),开源版下载地址。

AppBoxPro 是基于 FineUIPro 和 Entity Framework 的通用权限管理框架,包括用户管理、职称管理、部门管理、角色管理、角色权限管理等模块。

之前我曾经写过文章介绍AppBox,不过主要集中在 EntityFramework的使用上:

  1. AppBox_v2.0完整版免费下载,暨AppBox_v3.0正式发布!
  2. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
  3. AppBox升级进行时 - 扁平化的权限设计
  4. AppBox升级进行时 - Entity Framework的增删改查
  5. AppBox升级进行时 - 如何向OrderBy传递字符串参数(Entity Framework)
  6. AppBox升级进行时 - 关联表查询与更新(Entity Framework)
  7. AppBox升级进行时 - Attach陷阱(Entity Framework)
  8. AppBox升级进行时 - Any与All的用法(Entity Framework)

今天,除了公开 AppBoxPro 的最新源代码外,我主要介绍下如果做到将权限控制到表格行内按钮。

1. AppBox架构分析

AppBox中的权限管理涉及几个概念:角色、用户、权限、页面

  1. 角色:用来对用户进行分组,权限实际上是和角色对应的
  2. 用户:一个用户可以属于多个角色
  3. 权限:顶级权限列表,比如“CoreDeptView”的意思是部门浏览权限,为了方便权限管理,我们还给权限一个简单的分组
  4. 页面:用户操作的载体,一个页面可以拥有多个权限,这个控制是在页面代码中进行的,主动权在页面

用一张图来概述这个架构:

2. 权限与页面、角色的关系

2.1 权限与页面:之前我们提到页面拥有哪些权限,这个定义是在页面代码中的,而不是存在于数据库中。

这就提供更大程序的灵活性,相当于每个页面都可以从整个站点的权限集合中选择自己需要的权限。

比如,部门列表页面(dept.aspx),我们需要应用“部门浏览权限”,这个代码是定义在 dept.aspx.cs 中的:

1
2
3
4
5
6
7
8
9
10
11
12
13
publicpartialclassdept : PageBase
{
/// <summary>
/// 本页面的浏览权限,空字符串表示本页面不受权限控制
/// </summary>
publicoverridestringViewPower
{
get
{
return"CoreDeptView";
}
}

由于“浏览权限”每个页面都可能会用到,所以我们将处理“浏览权限”的代码放在基类 PageBase.cs 中:

1
2
3
4
5
6
7
8
9
10
11
12
publicclassPageBase : System.Web.UI.Page
{
protectedoverridevoidOnInit(EventArgs e)
{
base.OnInit(e);
// 此用户是否有访问此页面的权限
if(!CheckPowerView())
{
CheckPowerFailWithPage();
return;
}

在 CheckPowerView 中,则需要拿到当前登陆用户所属的角色,然后查找此角色是否拥有 “CoreDeptView” 权限的定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <summary>
/// 检查当前用户是否拥有当前页面的浏览权限
/// 页面需要先定义ViewPower属性,以确定页面与某个浏览权限的对应关系
/// </summary>
/// <returns></returns>
protectedboolCheckPowerView()
{
returnCheckPower(ViewPower);
}
/// <summary>
/// 检查当前用户是否拥有某个权限
/// </summary>
/// <param name="powerType"></param>
/// <returns></returns>
protectedboolCheckPower(stringpowerName)
{
// 如果权限名为空,则放行
if(String.IsNullOrEmpty(powerName))
{
returntrue;
}
// 当前登陆用户的权限列表
List<string> rolePowerNames = GetRolePowerNames();
if(rolePowerNames.Contains(powerName))
{
returntrue;
}
returnfalse;
}

还要注意一点:两个页面可能需要用到同一个权限

并且这个权限出现在页面中的逻辑会截然不同,比如“CoreDeptEdit”权限(编辑部门):

在dept.aspx页面,用来控制表格行内按钮的启用禁用状态:

1
2
3
4
5
6
protectedvoidGrid1_PreDataBound(objectsender, EventArgs e)
{
// 数据绑定之前,进行权限检查
CheckPowerWithWindowField("CoreDeptEdit", Grid1,"editField");
CheckPowerWithLinkButtonField("CoreDeptDelete", Grid1,"deleteField");
}

在dept_edit.aspx页面,用来控制对此页面的浏览权限:

1
2
3
4
5
6
7
8
9
publicpartialclassdept_edit : PageBase
{
publicoverridestringViewPower
{
get
{
return"CoreDeptEdit";
}
}

2.2 权限与角色:这个对应关系是定义在数据库中的,相应的页面操作界面如下所示。

3. 将权限控制到表格行内按钮

经过上面的介绍,我们对AppBox中的权限控制有个大致的了解。

下面,我们通过一个小案例来介绍如何将权限控制到表格行内按钮,还是以“CoreDeptEdit”这个权限为例。

3.1. 首先管理员(admin)登陆

3.2. 新建一个角色(测试角色)

3.3. 一个属于本角色用户(testuser)

3.4. 将 testuser 添加到测试角色

3.5. 为测试角色设置权限(注意,“编辑部门”权限没有选中)

3.6. 用新创建的用户 testuser 登陆

3.7. 新用户 testuser 没有编辑部门的权限

关键代码(更加详细的实现,请自行下载全部源代码):

在 dept.aspx.cs 中:

1
2
3
4
5
6
7
publicpartialclassdept : PageBase
{
protectedvoidGrid1_PreDataBound(objectsender, EventArgs e)
{
// 数据绑定之前,进行权限检查
CheckPowerWithWindowField("CoreDeptEdit", Grid1,"editField");

在 PageBase.cs 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassPageBase : System.Web.UI.Page
{
protectedvoidCheckPowerWithWindowField(stringpowerName, FineUIPro.Grid grid,stringcolumnID)
{
if(!CheckPower(powerName))
{
CheckPowerFailWithWindowField(grid, columnID);
}
}
protectedvoidCheckPowerFailWithWindowField(FineUIPro.Grid grid,stringcolumnID)
{
FineUIPro.WindowField btn = grid.FindColumn(columnID)asFineUIPro.WindowField;
btn.Enabled =false;
btn.ToolTip = CHECK_POWER_FAIL_ACTION_MESSAGE;
}

小结

AppBox的权限控制非常灵活和简单,并且提供细粒度到页面上的每个角落,不仅仅是页面浏览、编辑、删除、新增,甚至可以是某个特定按钮的启用禁用、某个DIV的显示隐藏、某个面板的折叠展开,其实控制权就在你的手里面。

全部源代码下载

http://yun.baidu.com/s/1gdAEOPd

转载于:https://my.oschina.net/iamsanshi/blog/333114

AppBoxPro - 细粒度通用权限管理框架(可控制表格行内按钮)源码提供下载相关推荐

  1. 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...

    菜单权限是我们经常会遇到的权限,也是经常需要进行处理的权限,往往权限是通过控制菜单权限开始折腾起来的. 第一步:我的后台管理控制端,有一个叫模块配置的功能,这里集中配置,哪些模块可以用,哪些模块先锁定 ...

  2. C#毕业设计——基于C#+asp.net+SQL server的通用作业批改系统设计与实现(毕业论文+程序源码)——作业批改系统

    基于C#+asp.net+SQL server的通用作业批改系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C#+asp.net+SQL server的通用作业批改系统设计与实现,文章 ...

  3. java毕业设计——基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码)——安全模块

    基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+sqlserver的通用安全模块设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  4. bootstrap table 表格支持shirt 多选_bootstrap-table 表格行内编辑实现

    这篇文章向大家介绍一下如何使用bootstrap table插件实现表格的行内编辑功能. 我的web前端学习交流群点击进入1045267283,欢迎加入! 先放一张效果图: 应用场景 之前的项目也是采 ...

  5. python测试开发django-173.bootstrap实现table表格行内编辑

    前言 网上看了很多基于bootstrap的table表格行内编辑,需要基于bootstrap-table,bootstrap-table-edit,x-editable等插件,写的很复杂. 我想实现的 ...

  6. 【飞行器】基于matlab四旋翼飞行器PID控制仿真【含Matlab源码 1277期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[飞行器]基于matlab四旋翼飞行器PID控制仿真[含Matlab源码 1277期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式 ...

  7. Datatables实现表格行内编辑功能

    表格行内编辑功能通过操作DOM来实现,最终实现效果如下代代码 html <table class="table table-striped table-bordered table-h ...

  8. (神技能)Python控制的鼠标实战与源码

    (神技能)Python控制的鼠标实战与源码 文章目录 (神技能)Python控制的鼠标实战与源码 一.序言 二.配置环境 1.下载pyautogui包 二.鼠标控制 1.获取鼠标位置函数以及测试源码 ...

  9. python通用权限管理框架图_通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

最新文章

  1. MyBaties学习记录
  2. c+还是python好-既然C+不如Java、Python,为什么还要学C+?
  3. 调用 标签打印软件_标签打印软件如何制作陶瓷标签模板
  4. Bugku 杂项(三)
  5. “约见”面试官系列之常见面试题之第八十四篇之手写promise(建议收藏)
  6. SharePoint 2013开发入门探索(一)- 自定义列表
  7. AI 算法在 FPGA 芯片上还有这种操作?
  8. Unity进阶之ET网络游戏开发框架 01-下载、运行
  9. 思科模拟器配置静态路由
  10. 图论 ——五种最短路算法
  11. Gxlcms有声小说系统/小说听书系统源码
  12. 使用SPSS对数据异常值进行探索分析
  13. Java初学者日志_05
  14. 解决iText 5.0.1生成pdf,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'...
  15. 名帖111 董其昌 小楷《千字文》
  16. android 5.0合并分区,中兴天极2 S291合并分区刷Android 5.1刷机教程
  17. 《十》浏览器基础及渲染引擎解析一个网页的过程、JavaScript 引擎解析 JavaScript 代码的过程
  18. Re-id多粒度网络(MGN)的PPT汇报总结
  19. PyCharm中的pyqt-designer环境搭建和汉化
  20. 基于Flash播放器的P2P直播解决方案

热门文章

  1. 大数据处理与分析方向主要干什么_不了解干法制砂?6个影响干法制砂效果的主要因素及干法制砂生产加工7大技术要点分析...
  2. 绝地求生2月19服务器维护,绝地求生2月19日停机维护几点结束_2020绝地求生2月19日开服时间介绍_求知软件网...
  3. ssh传输越多越慢_Linux下分析网站访问慢原因
  4. oracle连接报08006,oracle数据库无法连接 The Network Adapter could not establish
  5. 无法下载php怎办,php无法下载大文件怎么办
  6. python判定串口已连接_python 自动识别并连接串口的实现
  7. git rebase 修改提交信息
  8. Itsdangerous应用
  9. python virtualenv
  10. python `__bytes__`