浅谈ASP.NET的权限管理和用户验证
2008-09-23 10:51
375 查看
--==浅谈ASP.NET的权限管理和用户验证==--
类型:原创 | 来源:5D多媒体 | 作者:蓝鲸 | 时间:2004-12-21 | 人气:2044文章关键字:ASP
网站建设中,会碰到最常用的用户管理及操作权限设置验证,虽然这是很常见的一个管理操作,但要做得完善很不容易。最近参考了许多.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) ){} 关于权限和验证,就介绍到这里,只能简单介绍了。因实现的代码非常长,所以这里只是介绍一种思维方式,具体实现每个人都会有自己特点。
类型:原创 | 来源:5D多媒体 | 作者:蓝鲸 | 时间:2004-12-21 | 人气:2044文章关键字:ASP
网站建设中,会碰到最常用的用户管理及操作权限设置验证,虽然这是很常见的一个管理操作,但要做得完善很不容易。最近参考了许多.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的权限管理和用户验证
- ASP.NET - 浅谈ASP.NET的权限管理和用户验证
- 浅谈ASP.NET的权限管理和用户验证(转)
- 浅谈ASP.NET的权限管理和用户验证
- 浅谈ASP.NET的权限管理和用户验证
- [NET]浅谈ASP.NET的权限管理和用户验证
- 浅谈ASP.NET的权限管理和用户验证
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
- ASP.NET中启用Windows集成验证,怎样在调用System.DirectoryServices下的组件时传递安全上下文,也就是说当前用户凭据,来实现权限管理
- 开发日志:使用Asp.Net中的"Forms"验证方式,操作用户权限
- ASP.NET MVC(模型(Model),视图(View)和控制Controller)实践:实现身份验证权限管理
- 用户权限设计 ASP.NET系统用户权限设计与实现、用户认证管理设计方案、通用数据权限管理系统设计
- ASP.NET MVC 企业级实战 —— 创建用户权限管理示例程序(一)
- ASP.NET最简单的用户权限管理
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限
- ASP.NET MVC 企业级实战 —— 创建用户权限管理示例程序(一)
- ASP.NET MVC:窗体身份验证及角色权限管理示例
- 使用用户自定义控件实现asp.net的的权限管理
- ASP.NET MVC:窗体身份验证及角色权限管理示例