浅谈ASP.NET的权限管理和用户验证

转载 2006年06月15日 13:23:00
 网站建设中,会碰到最常用的用户管理及操作权限设置验证,虽然这是很常见的一个管理操作,但要做得完善很不容易。最近参考了许多.NET方面的书,特别关心这方面的,并结合自己特点,摸索了一下适合自己的用户管理方法,完成了基本管理类库。

  用户的管理方法,在设计时采取“用户——角色——许可”三级,这是WINDOWS操作系统的用户管理方法。一个用户可以有多个角色,一个角色也可以有多个许可。

  所以有数据库设计时分别设计:

  用户表:设UserID、用户名、用户信息
  角色表:设RoleID、CategoryID、RoleName、Description
  用户角色表:UserID、RoleID

  分类表:CategoryID、CategoryName、Description
  许可表:PermissionID、CategoryID、PermissionName、Description
  角色许可表:RoleID、PermissionID

  设计好数据库后,即可以从事设计用户、角色、许可的类。类库分数据层类,完成建立、查询、删除、更新等操作。业务层的类,需要实现与数据无关功能,建立如用户拥有角色、许可的列表,验证方式等。

  在业务层有一很重要的方法,即是用.NET的验证方式来实现,因此建立二个类:

  一是 SiteIdentity 类,它继承自业务层基类,并采用System.Security.Principal.IIdentity接口。该类主要存放用户的基本信息,包括用户名、EMAIL及ID号、密码。它的方法较简单,通过验证后,把用户的基本信息。

  二是 HelloseaPrincipal 类,它也继承业务基类,采用System.Security.Principal.IPrincipal接口。该类的主要方法有验证类,并把验证后的用户信息、用户角色列表、许可列表存储到类中。该类中有二个方法和一个Property是IIdentity接口必须的,即IsInRole、HasPermission,和System.Security.Principal.IIdentity Identity。

  设计完成类库后,即可以用来验证用户了。比如在管理登录页面中,需要判断用户的密码是否正确,并判断用户是否有许可进入管理页面。

  下面是验证中的一段:

 

HelloseaPrincipal admin = HelloseaPrincipal.ValidateLogin(txtAdminName.Text,
txtPassword.Text);
if (admin == null)
{
labInfo.Text = "没有该管理员帐号,或输入密码不正确。";
}
else if ( !admin.HasPermission(1) )
{
labInfo.Text = "您并不是管理角色并且没有管理许可,不能进入本系统。";
}
else
{
Context.User = admin;
FormsAuthentication.SetAuthCookie(txtAdminName.Text, true);
Response.Redirect("AdminIndex.aspx");
}

  注:!admin.HasPermission(1)的1是数据库中许可的ID号

  在内部页面中可以用:

 

         HelloseaPrincipal currentPrincipal = (HelloseaPrincipal)Context.User;
if (!currentPrincipal.HasPermission(1))
{
}

  这样方法来验证用户,虽然它也是通过Cookie,但.net中的Cookie是加密的,能实现很高的安全性。

  这样的设计还有个缺点,即是许可的ID号是固定值。考虑到一般的管理页面需要的许可比较固定,所以采用把许可设置在config文件中。而一些频道等需要经常变化的验证许可放置在数据库的频道表中。下面是我采用的config文件中设置方法实现,不详细介绍如何读取和写入了。从config文件读取和写入可采用XML串行化和反串行化很容易实现,可以用类来封装,并且在使用时非常方便,下面的语句即是通过封装类中读取许可的方法:

  

if ( !admin.HasPermission(OperatePermissionConfig.GetSettings().ManagerLogin) )
{
}

  关于权限和验证,就介绍到这里,只能简单介绍了。因实现的代码非常长,所以这里只是介绍一种思维方式,具体实现每个人都会有自己特点

ASP.NET MVC:窗体身份验证及角色权限管理示例

前言   本来使用Forms Authentication进行用户验证的方式是最常见的,但系统地阐明其方法的文章并不多见,网上更多的文章都是介绍其中某一部分的使用方法或实现原理,而更多的朋友则发文询...
  • hpnets
  • hpnets
  • 2015年03月07日 18:20
  • 4744

转:ASP.NET MVC:窗体身份验证及角色权限管理示例

前言   本来使用Forms Authentication进行用户验证的方式是最常见的,但系统地阐明其方法的文章并不多见,网上更多的文章都是介绍其中某一部分的使用方法或实现原理,而更多的朋友则发...
  • lenovouser
  • lenovouser
  • 2016年08月09日 22:47
  • 1164

权限管理——用户认证和用户授权

因为做了权限的项目经理,so,恶补一下一个权限框架:shiro。其实作为框架首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但框架没有必要这样。框架应该尽可能掩盖复杂的地方,露出一个干净...
  • xdd19910505
  • xdd19910505
  • 2016年07月16日 21:42
  • 5401

ASP.Net实现用户权限管理

一、 ASP.Net提供对于权限安全提供的技术Authentication(验证)         MembershipProvider (用保存的信息验证用户是 谁)Authorization(授权...
  • muzizongheng
  • muzizongheng
  • 2013年07月10日 15:42
  • 1592

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板

ASP.NET MVC+EF框架+EasyUI实现权限管系列   (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的...
  • txqqnet
  • txqqnet
  • 2013年10月10日 21:07
  • 1146

ASP.NET MVC 企业级实战 —— 创建用户权限管理示例程序(一)

网上有很多讨论ASP.NET MVC,也有讨论Jquery插件的,同时把两者结合起来做项目开发的却是比较少。 ASP.NET MVC是比较优秀的后台框架,而前台采用JQuery插件会做出比较漂亮美观...
  • wilsonke
  • wilsonke
  • 2012年11月16日 17:33
  • 12051

ASP.NET MVC 企业级实战 —— 创建用户权限管理示例程序(一)

网上有很多讨论ASP.NET MVC,也有讨论Jquery插件的,同时把两者结合起来做项目开发的却是比较少。 ASP.NET MVC是比较优秀的后台框架,而前台采用JQuery插件会做出比较漂亮...
  • binyao02123202
  • binyao02123202
  • 2012年11月10日 13:41
  • 1808

ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色

系列目录 分配用户给角色,跟分配角色给用户操作是基本一致的。 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操...
  • ymnets
  • ymnets
  • 2017年11月29日 08:39
  • 145

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录

系列目录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了 把我们之前的表更新到EF中去 登录在Account控制器,所以我们要添加Ac...
  • ymnets
  • ymnets
  • 2016年02月22日 12:57
  • 806

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户

系列目录 由于之前做了将权限赋给角色,还需要做将角色组赋给用户,和将用户赋给角色组,一个用户可以拥有多个角色组,一个角色组包含多个用户,打开模块管理,添加一个分配的操作码 并在 角色权限...
  • ymnets
  • ymnets
  • 2016年02月22日 12:58
  • 871
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈ASP.NET的权限管理和用户验证
举报原因:
原因补充:

(最多只允许输入30个字)