ASP.NET系统用户权限设计与实现

简介:

摘要本文依据RBAC的基本思想,利用ASP.NET中的用户控件技术,设计了在电子商务系统中用户权限控制的一种具体实现方法。

关键词ASP.NET角色访问控制用户控件


引言

电子商务系统对安全问题有较高的要求,传统的访问控制方法DAC(DiscretionaryAccessControl,自主访问控制模型)、MAC(MandatoryAccessControl,强制访问控制模型)难以满足复杂的企业环境需求。因此,NIST(NationalInstituteofStandardsandTechnology,美国国家标准化和技术委员会)于90年代初提出了基于角色的访问控制方法,实现了用户与访问权限的逻辑分离,更符合企业的用户、组织、数据和应用特征。ASP.NET是微软为了抗衡JSP而推出的新一代ASP(ActiveServerPages)脚本语言,它借鉴了JSP的优点,同时它又具有自身的一些新特点。

本文将首先介绍ASP.NET的基本情况和RBAC(RoleBasedAccessControl)的基本思想,在此基础上,给出电子商务系统中实现用户权限控制的一种具体方法。

ASP.NET概述

1、ASP.NET

ASP.NET是微软流行的动态WEB编程技术活动服务器网页(ASP)的最新版本,但它远不是传统ASP简单升级。ASP.NET和ASP的最大区别在于编程思维的转换,ASP.NET是真正的面向对象(Object-oriented),而不仅仅在于功能的增强。

在ASP.NET中,Web窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文本)和该页的编程逻辑。其中每一部分都存储在一个单独的文件中。可视元素在一个扩展名为.aspx文件中创建,而代码位于一个单独的类文件中,该文件称作代码隐藏类文件扩展名为.aspx.vb或.aspx.cs。这样,.aspx文件中存放所有要显示的元素,aspx.vb或.aspx.cs文件中存放逻辑。

2、用户控件(UserControl)

为了使用户能够根据需要方便地定义控件,ASP.NET引入了Web窗体用户控件的概念。实际上,只要将.aspx稍作修改即可转换为Web用户控件,扩展名为.ascx,.ascx和.aspx文件一样也有一个存放逻辑的代码隐藏类文件,扩展名为.ascx.vb或.ascx.cs,只是它不能作为独立Web窗体页来运行,只有当被包含在.aspx文件中时,用户控件才能工作。

通过以下两个步骤在WEB窗体页中设置用户控件:

(1)使用@Register指令在.aspx文件中注册用户控件。如要注册在放在相对路径“../UserControl/”下的头文件headinner.ascx的方法为:

<%@RegisterTagPrefix="Acme"TagName="Head"Src="../UserControl/headinner.ascx"%>

(2)在服务器控件的开始标记和结束标记之间(<formrunat=server></form>)声明该用户控件元素。例如要声明上面所导入的控件的语法为:

<Acme:Headrunat="server"/>

这样,该控件就成为页的一部分,并将在处理该页时呈现出来。并且,该控件的公共属性、事件和方法将向Web窗体页公开并且可以通过编程来使用。根据这个原理,就可以将每个页面初始化时所要执行的操作(如登录验证,角色验证)封装在用户控件当中。

RBAC的基本思想

RBAC(角色访问控制)的基本思想可简单地用图1来表示,即把整个访问控制过程分成两步:访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。

由于RBAC实现了用户与访问权限的逻辑分离,因此它极大的方便了权限管理。例如,如果一个用户的职位发生变化,只要将用户当前的角色去掉,加入代表新职务或新任务的角色即可,角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,并且委派用户到角色不需要很多技术,可以由行政管理人员来执行,而配置权限到角色的工作比较复杂,需要一定的技术,可以由专门的技术人员来承担,但是不给他们委派用户的权限,这与现实中情况正好一致。

用户权限在.NET中的设计与实现

利用.NET中的用户控件实现权限控制的基本思想是:根据角色访问控制(RBAC)的基本原理,给用户分配一个角色,每个角色对应一些权限,然后利用ASP.NET中的用户控件(UserControl)来判断该用户对应的角色是否对访问页面有访问的权力。

下面将从数据库设计、添加角色和用户控件的使用等三方面来阐述具体实现过程。

1、数据库中表的设计

首先,在数据库中设计功能模块表、功能表和角色表等三个表。

(1)功能模块表

为了管理好用户的权限,首先要组织好系统的模块,为此设计了一个功能模块表。见表1。


(2)功能表


每个功能模块所具有的子功能称为功能,如商品管理模块goods(属于功能模块的范畴)包含商品信息查询、商品信息更新、商品信息删除、商品定价信息查询以及商品定价信息更新五种功能,功能表的设计见表2。

上面提到的例子可以作为这样几条记录分别插入功能模块表和功能表。


insertintoTModulevalues(0,'商品管理模块','goods',5);
insertintoTfunctionvalues(0,'商品信息查询','selectgoods',0);
insertintoTfunctionvalues(1,'商品信息更新','updategoods',0);
insertintoTfunctionvalues(2,'商品信息删除','deletegoods',0);
insertintoTfunctionvalues(3,'商品定价信息查询','selectgoodsprice',0);
insertintoTfunctionvalues(4,'商品定价信息更新','updategoodsprice',0);

(3)角色表


角色表的设计关键在于角色值的定义,它是一个由0和1组成的类似二进制数的字符串。而功能表中的funcNo(功能编号)字段表示该功能在角色表的roleValue(角色值)字段中的位置,如果该位置对应的数值是0,表示该角色无此权限,如果值为1,则表示该角色拥有此权限。如角色普通会员的角色值为100100…00(共100位),如上所示,商品信息查询的功能编号为0,角色值100100…00的第0位为1,所以该普通会员角色拥有商品信息查询的功能;相反,该角色值的第1位为0,而功能编号为1的功能为商品信息更新,所以该普通会员角色没有商品信息更新的权限。它们的关系可由图2来表示。

2、角色的添加

有了上面几个表,角色页面的功能模块以及其对应的功能都可以从功能模块表和功能表中读出,如图3所示。


在将新角色普通会员插入数据库时,先将角色值的所有位都置为0,然后利用.NETFramework类库中的Replace函数将角色值中的打上勾的功能相应的功能编号位的值改为1。

例如,新添加一个角色名为普通会员的角色,它拥有的功能为商品信息查询(功能编号0)和商品定价信息查询(功能编号3)两项,则角色值应为1001000……00(100位),即角色值中第0位和第3位的值为1,其余为0。

3、利用用户控件实现访问权限

在定义好用户控件.ascx文件(head.ascx)及.ascx.cs(head.ascx,cs)文件时,接下去只要在.aspx文件中注册和声明它就可以了。

(1)注册

(2)声明

经过实践,在.aspx文件中声明.ascx文件可分为几种情况:

第一种情况:<?XML:NAMESPACEPREFIX =ACME /><?XML:NAMESPACE PREFIX = ACME />="SERVER">

第二种情况:="SERVER"FUNCNAME2="UPDATEGOODS"FUNCNAME1="SELECTGOODS"FLAG="0">

第三种情况:="SERVER"FUNCNAME2="UPDATEGOODS"FUNCNAME1="SELECTGOODS"FLAG="1"HEAD>

字段flag是用来控制怎样进行权限检查的标志,funcname指功能表中的功能英文名。如果flag为空,则不执行权限检查(第一种情况);否则如果flag=="0",则表示同时具有selectgoods(商品信息查询)和updategoods(商品信息更新)这两种权限的角色所对应的用户才有权利查看该页(第二种情况);否则,如果flag=="1",则认为,具有selectgoods(商品信息查询)或updategoods(商品信息更新)这两种权限中任意一种权限的用户就有权利查看该页(第三种情况)。

上面进行权限检查的过程全部由用户控件来实现,其全部方法都封装在.ascx.cs文件中,其中最主要的一个方法是检查某一角色是否拥有某一确定权限的checkAuth(stringroleId,stringfuncEName)方法。这个方法的思想如图4所示。


图4中roleValue(角色值)的第0位(selectgoods的功能编号)值为1,表示该角色拥有selectgoods(商品信息查询)的权限。这样,我们把对权限检查的所有逻辑都封装在了用户控件中,因此,对WEB窗体页.aspx文件而言,只需在导入.ascx文件时确定用户在访问该页面时所应拥有的权限,而不需对aspx.cs进行任何改动。

由上所述,可以很清楚地看出,只要在用户控件中对用户权限进行控制,再把它包括在.aspx文件中(这件事作者本来就是要做的),那么在编程的时候就不必考虑复杂的权限问题了。

结束语

本文在开发一个电子商务系统的实践中发现,公司对系统用户的权限控制非常重视。因此,设计一个简单方便又行之有效的权限控制机制对于电子商务系统是必不可少的。本文所提出的基于ASP.NET的电子商务系统用户权限设计和实现方法已经在实际的工作中得到了验证,修改指定权限组的操作变得非常方便。

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
2月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
35 4
|
3天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
3月前
|
前端开发 JavaScript 关系型数据库
.NET开源、强大的Web报表统计系统
.NET开源、强大的Web报表统计系统
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的云LIS系统平台源码
结合当今各检验科管理及实验室规模的不同状况,充分吸收当今IT科技的最新成就,开发出以高度产品化、功能强大、极易实施操作、并不断升级换代为主要特点的LIS系统。彻底解决检验科的信息孤岛,全面实现全院信息互通互联、高度共享,并为检验科的规范化管理提供了有力工具。
41 0
|
4月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
|
4月前
|
数据库
VB.NET 三层登录系统实战:从设计到部署全流程详解
VB.NET 三层登录系统实战:从设计到部署全流程详解
57 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的区域云LIS系统平台源码
asp.net基于WEB层面的区域云LIS系统平台源码
49 1
|
4月前
|
存储 开发框架 .NET
【ASP.NET】医学实验室管理(LIS)系统源码
【ASP.NET】医学实验室管理(LIS)系统源码
69 0