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

特别声明:

提供的源代码已经包含了 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

时间: 2024-11-08 14:25:21

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

Java开源生鲜电商平台-RBAC系统权限的设计与架构(源码可下载)

Java开源生鲜电商平台-RBAC系统权限的设计与架构(源码可下载) 说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想来讨论关于权限系统的实现. 1.1.       技术策略 l         身份认证 在B/S的系统中,为识别用户身份,通常使用的技术策略为将用户的身份记录在Session中,也就是当用户登录时即获取用户的身份信息,并将其记录

Angel工作室EasyUI通用权限管理框架正式发布

框架系统基本功能: 1.管理员管理 2.日志管理 3.菜单导航管理 4.角色管理 5.操作权限管理 6.系统设置管理 7.报表导出 8.系统参数管理  该框架应该说是码农们接单利器的首选解决方案,本框架适合中小型企业管理系统或者网站管理系统后台. 说了那么多,还是先来看看我们的功能图片吧! 登录页面 后台主页面 导航栏目管理 权限设置 系统日志管理 以上界面代码可以满足大部分开发者的需求,让开发人员能省不少时间. 以上源码有偿提供,码农生活不容易啊,各个看官不要声泪俱下的索求源码啦!在此先谢谢谢

vxe-table 可编辑表格 行内编辑以及验证 element-UI集成

<vxe-table border show-overflow ref="xTable"  --------------------------------------------------------------------------------------------可根据此变量控制表格内容 class="vxe-table-element" height="600" :data="tableData"-----

FineUI给表格行内链接设置弹出窗体

FineUI的表格链接可以设置相应的弹出窗体,这样我们可以借此实现对表格行相关的信息查询.编辑等功能. 前台代码: <f:Grid ID="Grid1" Width="800px" DataKeyNames="Id,Name" runat="server" Title="表格"> <Columns> <f:BoundField DataField="Name"

jQuery学习笔记(6)--复选框控制表格行高亮

1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head runat="server"> 3 <title></title> 4 <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 5 <style ty

VUE+Element UI实现简单的表格行内编辑效果

原理是通过Css控制绑定的输入控件与显示值,在选中行样式下对控件进行隐藏或显示 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <!-- 引入样式 --> 7 <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-default/

通用权限管理平台权限控制--按钮权限

通用权限管理系统的重点在于如何更好的控制按钮操作权限,在下结合自己的平台经验,在使用MVC的环境下,使用自定义MVC控件,并且结合系统的权限控制于一体,减少业务在权限方面的控制,使对按钮权限的控制更加简洁. 通用权限控制系统的权限用户控件实现以后,在实际使用中如下所示: @Html.Eap().Button().Id("btnAdd").Name("添加").Class("easyui-linkbutton").IconClass("i

网站安全通用防护代码(C#版本源码提供)

每一个开发者都会意识到,网站发布之前,需要进行安全检查. 那么如何拦截攻击者注入恶意代码?如何防御诸如跨站脚本攻击(XSS).SQL注入攻击等恶意攻击行为? 针对目前常见的一些安全问题,结合目前一些常见的防护办法,通用权限管理系统底层增加了安全防护代码, 现将源码提供如下 namespace DotNet.Utilities { /// <summary> /// 网站安全通用防护 /// /// 主要功能: /// 拦截攻击者注入恶意代码,可以防御诸如跨站脚本攻击(XSS).SQL注入攻击等

Django Rest Framework源码剖析(二)-----权限

一.简介 在上一篇博客中已经介绍了django rest framework 对于认证的源码流程,以及实现过程,当用户经过认证之后下一步就是涉及到权限的问题.比如订单的业务只能VIP才能查看,所以这时候需要对权限进行控制.下面将介绍DRF的权限控制源码剖析. 二.基本使用 这里继续使用之前的示例,加入相应的权限,这里先介绍使用示例,然后在分析权限源码 1.在django 项目下新建立目录utils,并建立permissions.py,添加权限控制: class MyPremission(obje