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

2023-11-09

引言

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

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

    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的方法为:

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

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

<Acme: Head runat="server"/>

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

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

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

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

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

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

    1、数据库中表的设计

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

    (1) 功能模块表

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

    (2) 功能表

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

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

 

insert into TModule values(0,/'商品管理模块/',/'goods/',5);
insert into Tfunction values(0,/'商品信息查询/',/'selectgoods/',0);
insert into Tfunction values(1,/'商品信息更新/',/'updategoods/',0);
insert into Tfunction values(2,/'商品信息删除/',/'deletegoods/',0);
insert into Tfunction values(3,/'商品定价信息查询/',/'selectgoodsprice/',0);
insert into Tfunction values(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,然后利用.NET Framework 类库中的Replace函数将角色值中的打上勾的功能相应的功能编号位的值改为1。

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

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

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

    (1) 注册

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

    (2) 声明

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

  第一种情况:<Acme:Head runat="server" />

  第二种情况:<Acme:Head runat="server" flag=0 funcname1=selectgoods funcname2=updategoods />

  第三种情况:<Acme: Head runat="server" flag=1 funcname1= selectgoods funcname2=updategoods />

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

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

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

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

    结束语

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

<script type="text/javascript"> &amp;amp;amp;amp;lt;!-- google_ad_client = "pub-9803192656282392"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_channel =""; google_color_border = "EEF4FA"; google_color_bg = "EEF4FA"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--&amp;amp;amp;amp;gt; </script><script src="ASP_NET系统用户权限设计与实现(转摘) - hustbill的专栏_files/show_ads.js" type="text/javascript"> </script><script type="text/javascript"> &amp;amp;amp;lt;!-- google_ad_client = "pub-9803192656282392"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_channel =""; google_color_border = "EEF4FA"; google_color_bg = "EEF4FA"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--&amp;amp;amp;gt; </script><script src="ASP_NET系统用户权限设计与实现(转摘) - hustbill的专栏_files/show_ads.js" type="text/javascript"> </script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET系统用户权限设计与实现 的相关文章

随机推荐

  • 通过Restful api接口上传文件

    Restful api接口获取文件流的方法如下 from requests toolbelt import MultipartEncoder with open ch01 mp4 rb as f file stream f read m M
  • 计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

    图像分类 教程博客 传送门链接 链接 在本教程中 您将学习如何使用迁移学习训练卷积神经网络以进行图像分类 您可以在 cs231n 上阅读有关迁移学习的更多信息 本文主要目的是教会你如何自己搭建分类模型 耐心看完 相信会有很大收获 废话不多说
  • 初探Javascript模块化开发

    随着简单网页逐渐变成交互复杂的网站应用 网页上的Javascript代码也变得越来越庞大 越来越复杂 加之随即而来的多人协作分工的开发方式 每个人只负责其中一个或者几个很小的功能模块 最终必须通过把各个功能模块组合才能变成一个完整的功能 而
  • 2023.9.6 Redis 的基本介绍

    目录 Redis 的介绍 Redis 用作缓存和存储 session 信息 Redis 用作数据库 消息队列 消息队列是什么 Redis 用作消息队列 Redis 的介绍 特点 内存中存储数据 奠定了 Redis 进行访问和存储时的快 可编
  • Java多线程专题-synchronized的使用

    为什么有线程安全问题 当多个线程同时共享同一个全局变量或静态变量 做写的操作时 可能会发生数据冲突问题 也就是线程安全问题 但是做读操作是不会发生数据冲突问题 使用同步方式解决线程安全 问 如何解决多线程之间线程安全问题 答 使用多线程之间
  • 学习SVG(十)滤镜

    什么是滤镜 使用滤镜后 在SVG中不会直接将图形渲染到画布上 是先将图形的像素保存到缓存中 然后将滤镜指定的操作应用图形的像素对象中 然后在把新的图形像素对象展示在画布上 使用filter元素指定一组 滤镜元素 在渲染图形对象时 将该操作应
  • 南航数据分析与挖掘课设1(上)——基于多元线性回归模型,ARIMA序列的中国GDP增长影响因素研究及预测(R语言)

    基于多元线性回归模型 ARIMA序列的中国GDP增长影响因素研究及预测 摘要 在国民经济发展的过程中 国内生产总值 GDP 是指按国家市场价格计算的一个国家 或地区 所有常驻单位在一定时期内生产活动的最终成果 常被公认为是衡量国家经济状况的
  • centos7 安装Anaconda3 亲测成功

    目录 Anaconda简介 1 下载 1 1 创建一个文件夹来存放安装包 1 2 进入到文件夹里面 1 3 wget命令行下载 1 4 下载情况 2 开始安装 2 1 进入到存放文件的位置 2 2 运行 sh 文件 2 3 进入注册信息页面
  • python中heapq的使用

    目录 1 heapq heapify list 2 heapq heappush heap item 3 heapq heappop heap 4 heapq nlargest n heap 5 heap nsmallest n heap
  • 用Flair(PyTorch构建的NLP开发包)进行文本分类

    Flair是一个基于PyTorch构建的NLP开发包 它在解决命名实体识别 NER 语句标注 POS 文本分类等NLP问题时达到了当前的顶尖水准 本文将介绍如何使用Flair构建定制的文本分类器 简介 文本分类是一种用来将语句或文档归入一个
  • 笔记——尤老师讲笔试

    1 Function内部不能使用时间延迟 也不能使用 这种事件触发 只能实现一些组合逻辑运算 也不能调用task task可以有时间延迟 function不可以用时间延迟 Verilog 中的 task 是一种不可综合的语法 它既提供了从不
  • 实例分割之 Mask R-CNN

    论文地址 Mask R CNN 代码地址 facebookresearch Detectron Mask R CNN是在Faster R CNN的基础上进行了改进 Faster R CNN主要是用来进行目标识别的 为了能够进行实例分割 Ma
  • SpringBoot项目-执行查询-抛出关于zeroDateTimeBehavior异常提示

    错误信息 The connection property zeroDateTimeBehavior only accepts values of the form exception round or convertToNull The v
  • [论文阅读:姿态识别&Transformer] 2110 HRFormer: High-Resolution Transformer for Dense Prediction

    论文阅读 姿态识别 Transformer 2110 HRFormer High Resolution Transformer for Dense Prediction 文章目录 论文阅读 姿态识别 Transformer 2110 HRF
  • js对象数组去重问题

    const arr2 id 1 name 张三 id 2 name 李四 id 1 name 张三 id 2 name 李四 const newArr arr2 filter currentValue currentIndex selfLi
  • boost电路公式详解

    这个是我在设计boost电路遇到问题时找的文章 觉得说的很好 所以就转载过来方便查看 原文链接 https www eet china com mp a68179 html 以下是那边文章的内容 我们知道 不论是buck 还是boost电路
  • Centos7搭建简单的Samba服务器

    目录 背景要求 环境准备 在centos7中搭建一个简单的samba服务器用于测试 帮助理解samba服务的简易用法 背景要求 设置公共目录 所有人可以访问 权限为只 读 为结算中心和技术部分别建立单独的目录 只 允许公司总经理和对应部门员
  • 高德地图自定义车辆定位marker以及弹出框窗口

    地图安装 npm install vue amap save 项目中设置高德地图 安装成功后在main js设置以下内容 import VueAMap from vue amap Vue use VueAMap VueAMap initAM
  • 邻接矩阵无向图

    邻接矩阵 无向图和有向图在邻接矩阵中的表示方法 无向图和有向图大同小异 在这里只以无向图为例 代码部分通过简单调整即可对应编译有向图 邻接矩阵数据类型定义 define MaxVertices 100 定义最大容量 typedef stru
  • ASP.NET系统用户权限设计与实现

    引言 电子商务系统对安全问题有较高的要求 传统的访问控制方法DAC Discretionary Access Control 自主访问控制模型 MAC Mandatory Access Control 强制访问控制模型 难以满足复杂的企业环