细谈asp.net系统用户权限开发

谈起asp.net的系统控件,要提及RBAC的基本思想,RBAC,就是英文:role based access control,译为,基于访问权限角色,在设计电子商务网站中经常要用到。

电子商务系统对安全问题有较高的要求,传统的访问控制方法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概述

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) 功能模块表

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

表下:

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

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

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

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

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

three,利用用户控件实现访问权限

在定义好用户控件.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)方法。图:

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

OK,介绍到这里。

时间: 2024-08-27 05:09:09

细谈asp.net系统用户权限开发的相关文章

手动代替自动化之系统用户权限篇

用户管理 用户的创建删除管理 useradd:创建用户相关 userdel:删除用户 usermod:管理用户 passwd:用户密码相关 用户组的创建删除管理 groupadd: 用来添加组相关 groupmod: 用来管理组相关 groupdel: 用来删除组相关 权限管理 文件/目录的三种权限 两种权限设置方法 文件管理 make值 文件系统上的特殊权限 ACL权限 上述就是本文的三个模块了 下面聊些注意事项(小伙子作死不算啊) 注意 最好不要手工改文件,能用命令的就用命令防止出错. ro

系统用户权限,系统权限位,用户相关命

1 如何让普通用户拥有root用户的能力 1.1 知道root密码,切换到root用户 ? su - root 1.2 修改文件目录数据权限 chmod 0=rwx -R /oldboy/oldboy1/ -R:递归修改目录权限,会修改目录下所有目录及文件的权限 1.3 普通用户提权 1.3.1 配置sudo文件 (1)visudo = vim etc/sudoers? ? ###推荐visudo,配置文件时会有语法检查功能root ALL=(ALL) ALL? ? 看需要添加权限①oldboy

Linux系统用户权限管及目录、文件的管理(基础详解,操作演示,通俗易懂)

用户账号和组账号 Linux系统是基于用户身份对资源访问进行控制,Linux的用户账号分为以下三类: 超级用户:就是root用户,在所有用户中它拥有最大的权限 ,管理着普通用户,可以说你有了一台服务器的root权限,那这台服务器基本就是你的了. 普通用户: 一般用户,其使用系统的权限受限,可以使用root账户对其管理. 程序用户:也叫系统用户,保障系统运行的用户,一般不可人为登录系统. 常用的组账号一般分为两种: 基本组:也叫私有组,一般在创建账号时系统默认给每个账号都创建一个与自己同名的基本组

文科生细谈学习Linux系统的重要性

首先大概介绍下自己,我学的是公共事业管理方面的专业,可以说是面向纯理论,社区管理社会管理的专业,但是从大二开始,对网络及服务器运维方面产生浓厚兴趣,并不断在网上找相关资料. 在这期间经历过很多,单说桌面环境从Ubuntu到Arch到传闻中以美化著称的elementary OS再到Centos和Debian,对了,还有当时和现在反响都不错的deepinlinux.这些当时都是本着好奇的心理,在不断地折腾,因为刚刚从win平台中折腾过来,比较顺眼KDE,Gnome,和MATE这样的桌面环境(毕竟是小

浅谈ASP.NET MVC4 Web应用开发之一 实现简单的登录

2016-07-24 一.创建一个属于自己的ASP.NET MVC Web应用程序 新建项目-->模板-->Visual C#-->Web->选择ASP.NET Web应用程序 选择MVC,视图引擎默认为Razor,创建单元测试项目不勾选,更改身份验证(无身份验证) 这样就创建好了一个基本的ASP.NET MVC Web应用程序了O(∩_∩)O~~ 二.创建T4模板,建立与SQL Sever数据库的连接(有两种形式:我们后面使用方法1)  右键[Models]-->添加--&

mysql 开发进阶篇系列 45 xtrabackup 安装与用户权限说明(系统用户和mysql用户)

一. 安装说明 安装XtraBackup 2.4 版本有三种方式: (1) 存储库安装Percona XtraBackup(推荐) (2 )下载的rpm或apt包安装Percona XtraBackup. (3) 源代码编译和安装. Percona为yum (Red Hat.CentOS和Amazon Linux AMI的RPM包)和apt (Ubuntu和Debian的.deb包)提供存储库,用于Percona Server.Percona XtraBackup和Percona Toolkit

vsftpd实例:匿名访问共享+系统用户访问控制

FTP环境实例: 某公司由于业务发展需求,现需要在公司内部搭建一台FTP服务器!该公司有数个部门(IT FD HR)和N名员工(fus1 fus2 fus3 fus4 fus5 fus6 fus7 fus8 fus9)使用该服务器!为了保障系统和其他数据的安全,要求用户只能访问FTP服务根目录(/var/ftp)以下的数据:要求根目录下有一个公共目录,该目录所有人都可以访问,并且具有上传下载权限:根目录下还要有每个部门的工作目录,并且仅限该部门的员工访问:在各部门目录下要有一个仅限该部门员工使用

二次开发Jumpserver,增加权限申请模块实现用户组归属,服务器及组授权,系统用户授权申请处理

这是jumpserver二次开发系列第三篇,主要实现用户权限的自主申请.审批和授权功能.有两种方式申请权限: 1.加入用户组,拥有与该用户组相同的权限: 2.按资产.资产组及系统用户申请相应权限. 一.数据库模型设计 其中用户.用户组.资产.资产组及系统用户为原来各模块已设计的表 二.model代码 权限申请表与用户.用户组.资产.资产组及系统用户使用ManyToManyField定义关系 class Checker(models.Model): checker_um = models.Char

Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实