沙发(SF)通用权限验证组件

开篇

上一篇提到了通用权限的设计思路,根据设计思路一步一步的来实现一个相对通用的权限验证组件。在VS2010下用C#语言基于.net framework2.0框架实现具体功能。

配置文件

配置文件为XML格式(SFPermission.xml)公有四个节点分类:

一、AppSet节点:此节点配置一些基础信息。

 <AppSet>
<!--数据库节点名称(必须在Web.config的connectionStrings节点下面)-->
<add key="DataConnName" value="ConnString"/>
<!--数据库连接字符串(DataConnName和ConnString节点只要有一个存在即可)-->
<add key="ConnString" value="数据库连接字符串"/>
<!--页面截取规则(0:只截取文件名,1:截取全路径,2:截取全路径(单文件去掉第一个[/]、包含路径的保留第一个[/]),可以在Page节点配置例外)-->
<add key="PageAllPath" value="2"/>
<!--未登录时的返回页面(登录验证为通过或SQL语句参数要取的Session值为空或不存在)-->
<add key="OutLogin" value="未登录时的输出信息"/>
<!--登录验证的Session名称-->
<add key="LoginSessionName" value="SysUserCode"/>
</AppSet>

二、MessageSet节点:没有权限时提示信息的配置。

 <MessageSet>
<!--没有权限时的配置信息(Key为后缀名[后缀名为通配]或文件名,value为需要输出的文本)-->
<add key=".aspx" value="没有权限"/>
<!--没有权限时的配置信息(Key为后缀名,value为需要输出的文本)-->
<add key=".ashx" value="没有权限"/>
</MessageSet>

三、Pages节点:配置在截取验证URL的名称时要拼接参数的参数。

 <!--需要连接参数的页面配置(配置的页面将用组合后的整体作为验证权限的页面名称)-->
<Pages>
<!--名称的第一个字符为(点)表示此种后缀名的请求都将连接某参数,value多个参数名用逗号分隔-->
<add key=".ashx" value="Action" />
</Pages>

四、Permission节点:配置需要权限验证的页面、忽略权限验证的页面、权限验证的SQL语句、有权限的子功能(权限控制到按钮时)查询语句。

 <Permission>
<!--做权限验证的页面(.开始表示后缀名通配规则,/开始表示目录通配,/结束标志包含子目录)-->
<PermissionPage>
<add value="/Manage" />
<add value=".aspx" />
<add value=".ashx" />
</PermissionPage>
<!--不作权限和登录验证的页面(.开始表示后缀名通配规则,/开始表示目录通配,/结束标志包含子目录)-->
<Ignore>
<add value="/Manage/Default.aspx" />
<add value="/Manage/Login.aspx" />
<add value="/Manage/VerifyCode.aspx" />
</Ignore>
<!--查询URL记录的SQL语句(可以有多个,只要有一个语句查询到记录即可,只有能查询到记录的URL请求才会进行权限验证)-->
<PermissionUrlSQL>
<!--查询权限SQL语句-->
<CommandText value="select A.FID from Man_Function A where A.FURL=@FURL" />
<Parameter>
<!--SQL语句参数名-->
<ParameterName value="@FURL" />
<!--SQL语句参数类型-->
<DBType value="VarChar" />
<!--SQL语句参数要取的Session名称([PageName]表示取URL的字符串)-->
<SessionName value="PageName" />
</Parameter>
</PermissionUrlSQL>
<!--权限验证SQL语句(可以有多个,只要有一个语句验证有权限则可以通过)-->
<PermissionSQL>
<!--查询权限SQL语句-->
<CommandText value="select A.FID from Man_Function A,Man_Popedom B where A.FID=B.FID AND B.EmpCode=@EmpCode AND A.FURL=@FURL" />
<Parameter>
<!--SQL语句参数名-->
<ParameterName value="@EmpCode" />
<!--SQL语句参数类型-->
<DBType value="VarChar" />
<!--SQL语句参数要取的Session名称([PageName]表示取URL的字符串)-->
<SessionName value="SysUserCode" />
</Parameter>
<Parameter>
<!--SQL语句参数名-->
<ParameterName value="@FURL" />
<!--SQL语句参数类型-->
<DBType value="VarChar" />
<!--SQL语句参数要取的Session名称([PageName]表示取URL的字符串)-->
<SessionName value="PageName" />
</Parameter>
</PermissionSQL>
<!--查询URL子项记录的SQL语句(可以有多个,只要有一个语句查询到记录即可,只有能查询到记录的URL请求才会进行权限验证,通常情况是权限需要控制到按钮时需要的)-->
<ChildUrlSQL>
<!--查询权限SQL语句-->
<CommandText value="select A.FID from Man_Function A where A.FID=@FID" />
<Parameter>
<!--SQL语句参数名-->
<ParameterName value="@FID" />
<!--SQL语句参数类型-->
<DBType value="Int" />
<!--SQL语句参数要取的Session名称([PageName]表示取URL的字符串)-->
<SessionName value="PageName" />
<!--SQL语句参数要取的列名称(PermissionSQL结点中SQL语句的列,[PageName]表示取URL的字符串),和SessionName节点不能同事存在-->
<ColumnName value="FID" />
</Parameter>
</ChildUrlSQL>
<!--菜单的子项查询(通常情况是权限需要控制到按钮时需要的)-->
<ChildSQL>
<!--查询SQL语句-->
<CommandText value="select A.FID from Man_Function A where A.FID=@FID" />
<Parameter>
<!--SQL语句参数名-->
<ParameterName value="@FID" />
<!--SQL语句参数类型-->
<DBType value="Int" />
<!--SQL语句参数要取的Session名称-->
<SessionName value="DateTime" />
<!--SQL语句参数要取的列名称(PermissionSQL结点中SQL语句的列,[PageName]表示取URL的字符串),和SessionName节点不能同事存在-->
<ColumnName value="FID" />
</Parameter>
<!--按钮权限标志的列名称,这个值是要和前台页面元素的[sfcode]的值所对应的-->
<ButtonFlagColumn value="FID" />
</ChildSQL>
</Permission>

其中ChildUrlSQL和ChildSQL节点是在权限验证控制到按钮(功能点)时才用到的,如果只是控制到页面可以删除这两个节点;

PermissionUrlSQL和PermissionSQL节点是控制到页面时的权限验证的SQL语句配置,如果只是做简单的登录验证也可以删除这两个节点。

下一篇文章将介绍组件的整体结构和实现,具体的编码工作也已经完成,初步测试了一下还可以。

ASP.NET通用权限组件实现一的更多相关文章

  1. ASP.NET通用权限组件思路设计

    开篇 做任何系统都离不开和绕不过权限的控制,尤其是B/S系统工作原理的特殊性使得权限控制起来更为繁琐,所以就在想是否可以利用IIS的工作原理,在IIS处理客户端请求的某个入口或出口通过判断URL来达到 ...

  2. ASP.NET通用权限系统快速开发框架

    系统在线演示地址: http://120.90.2.126:8051 登录账户:system,密码:system### DEMO下载地址: http://download.csdn.net/detai ...

  3. ASP.NET通用权限验证组件实现

    沙发(SF)通用权限验证组件 开篇 本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 1.   类介绍 1.SFWebPermissio ...

  4. ASP.NET通用权限框架 权限管理系统源码jquery 精美UI源码

    软件技术开发,合作请联系QQ:858-048-581 开发工具 VS2010 .sql2005.2008等(在Sql server数据执行脚本即可)  VS2010 打开保证本地运行成功(数据库.源代 ...

  5. asp.net MVC通用权限管理系统-响应式布局-源码

    一.Angel工作室简单通用权限系统简介 AngelRM(Asp.net MVC Web api)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术 ...

  6. 基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术-Angel工作室通用权限管理

    一.Angel工作室简单通用权限系统简介 AngelRM(Asp.net MVC Web api)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术 ...

  7. ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  8. asp.net MVC通用分页组件 使用方便 通用性强

    asp.net MVC通用分页组件 使用方便 通用性强   该分页控件的显示逻辑: 1 当前页面反色突出显示,链接不可点击 2 第一页时首页链接不可点击 3 最后一页时尾页链接不可点击 4 当前页面左 ...

  9. FineAdmin.Mvc 使用ok-admin+ASP.NET MVC搭建的通用权限后台管理系统

    FineAdmin.Mvc 介绍 使用ok-admin+ASP.NET MVC搭建的通用权限后台管理系统RightControl后台layui模板不太好看,换成ok-admin v2.0重写一遍.项目 ...

随机推荐

  1. JQuery 之事件中的 ----- hover 与 onmouseover 、onmouseout 联系

    hover([over,]out) 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态. 当鼠标移动到一个匹配的元素 ...

  2. jsp页面获取服务器时间

    Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MON ...

  3. 在 Xcode中 修改文件中自动创建的Created by和Copyright

    在Xcode里创建的时候,会自动生成注释 //  Created byxxx on 15/7/10. //  Copyright (c) 2015年 xxxx. All rights reserved ...

  4. wxPython缩放图片控件的一个小例子

    前几天写程序的时候,想有个自适应的图片控件,但是一直没有找到合适的解决方案.今天终于解决了这个问题,发在这里,以供参考. 程序截图: 文件下载地址: http://files.cnblogs.com/ ...

  5. 初识KMP

    KMP简介 KMP是一种由Knuth(D.E.Knuth).Morris(J.H.Morris)和Pratt(V.R.Pratt)设计的字符串匹配算法.对目标串T[0:n-1]中查找与之匹配的模式串P ...

  6. C++程序设计实践指导1.13自然数集中找合数改写要求实现

    改写要求1:用单链表实现 改写要求2:析构函数中依次将链表结点删除 #include <cstdlib> #include <iostream> using namespace ...

  7. 如何判断CPU的位数

    CPU是16位,32位,还是64位,主要指的是数据总线(data bus)有多少位,16位数据总线表示CPU一次可以从内存取2个byte的数据,32位数据总线表示CPU一次可以从内存取4byte数据, ...

  8. yii2 改变首页,变成登录页

    在main.php中添加'defaultRoute'=>'site/login',//默认路由,控制显示的第一个页面,控制器+方法

  9. 【3】python核心编程 第五章-数字

    1.用大写字母 “L”表示长整数 尽管 Python 也支持用小写字母 L 标记的长整型,但是我们郑重推荐您仅使用大写的 “L”, 这样能有效避免数字1 和小写L 的混淆.Python 在显示长整数类 ...

  10. Python Challenge 过关心得(1)

    正式开始第1关,这一关的URL的特殊部分是map. 这关的图片上有一个本子,上面写着K→M,O→Q,E→G,稍微思索就能发现这几个字母都是按照字母表的顺序向后移动了两位,那么最投机取巧的方法就是把ma ...