一步步打造基于ASP.NET的CMS内容管理系统--Step4 权限设定(补充)
2010-05-30 11:04
671 查看
Dotnetcms Portal基本上是我在cnblogs文章的一个整合,DEMO演示地址
Demo: http://portal.dotnetcms.org
本文将介绍如何使用权限。
关于权限,网上有很多了,不过,Dotnetcms的权限控制方式主要采用配置方式,也就是精确到页面,在
web.config里,可以定义
<authorization>
<allow roles="administrators;users" />
<deny users="*"></deny>
</authorization>
类似这样的访问方式,那么是怎么实现的呢?.NET本身是不支持allow这样角色的,为此我们需要实现IPrincipal接口(好像MSDN上有文章介绍)
然后在登录页面里,实现身份验证票,也就是把roles存到cookie里,这样就可以了
这样还可以利用Users.IsUserInRoles("adminstrator");判断用户是否在角色里
注意:这里仅是权限管理的一种方式,事实上,完全可以不适合任何角色,直接在Page_Load里检测用户的权限例如
SQL="select * from roles where username='xx'"
直接读取角色,然后对roles进行处理,他的好处简单,但是缺点:
1)无法充分利用.NET提供的便利功能
2)每次判断都需要到数据库里读roles,显然没有.NET提供的读取coookie快
当然,我们也可以自定义吧roles存到cookie,但是还需要对cookie进行一些处理也是比较麻烦
----------------------------------------
以下是广告时间:
经过两周的努力,Dotnetcms Portal系统终于上线了,
下载地址为:http://www.dotnetcms.org/bbs/showforum-2.aspx
使用指南:新手必看,否则不知道如何使用本系统 http://www.dotnetcms.org/userguid/use1.html
Demo: http://portal.dotnetcms.org
Demo: http://portal.dotnetcms.org
本文将介绍如何使用权限。
关于权限,网上有很多了,不过,Dotnetcms的权限控制方式主要采用配置方式,也就是精确到页面,在
web.config里,可以定义
<authorization>
<allow roles="administrators;users" />
<deny users="*"></deny>
</authorization>
类似这样的访问方式,那么是怎么实现的呢?.NET本身是不支持allow这样角色的,为此我们需要实现IPrincipal接口(好像MSDN上有文章介绍)
public class CustomPrincipal : IPrincipal { private IIdentity _identity; private string[] _roles; public CustomPrincipal(IIdentity identity, string[] roles) { _identity = identity; _roles = new string[roles.Length]; roles.CopyTo(_roles, 0); Array.Sort(_roles); } // IPrincipal Implementation public bool IsInRole(string role) { return Array.BinarySearch(_roles, role.ToLower()) >= 0 ? true : false; } public IIdentity Identity { get { return _identity; } } public bool IsInAllRoles( params string [] roles ) { foreach (string searchrole in roles ) { if (Array.BinarySearch(_roles, searchrole.ToLower()) < 0 ) return false; } return true; } public bool IsInAnyRoles( params string [] roles ) { foreach (string searchrole in roles ) { if (Array.BinarySearch(_roles, searchrole.ToLower()) >= 0) return true; } return false; } /// <summary> /// 角色列表,多个角色以分号分隔 /// </summary> /// <param name="roles"></param> /// <returns></returns> public bool IsInAnyRoles(string roles) { return IsInAnyRoles(roles.Split(new char[] { ';' })); } }
然后在登录页面里,实现身份验证票,也就是把roles存到cookie里,这样就可以了
string Roles = "roles"; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,uid.ToString(),DateTime.Now,DateTime.Now.AddHours(2), true,Roles); string encryptedTicket = FormsAuthentication.Encrypt(ticket); HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket); authCookie.Path = FormsAuthentication.FormsCookiePath; authCookie.Expires = DateTime.Now.AddHours(2); Response.Cookies.Add(authCookie);
这样还可以利用Users.IsUserInRoles("adminstrator");判断用户是否在角色里
注意:这里仅是权限管理的一种方式,事实上,完全可以不适合任何角色,直接在Page_Load里检测用户的权限例如
SQL="select * from roles where username='xx'"
直接读取角色,然后对roles进行处理,他的好处简单,但是缺点:
1)无法充分利用.NET提供的便利功能
2)每次判断都需要到数据库里读roles,显然没有.NET提供的读取coookie快
当然,我们也可以自定义吧roles存到cookie,但是还需要对cookie进行一些处理也是比较麻烦
----------------------------------------
以下是广告时间:
经过两周的努力,Dotnetcms Portal系统终于上线了,
下载地址为:http://www.dotnetcms.org/bbs/showforum-2.aspx
使用指南:新手必看,否则不知道如何使用本系统 http://www.dotnetcms.org/userguid/use1.html
Demo: http://portal.dotnetcms.org
相关文章推荐
- 一步步打造基于ASP.NET的CMS内容管理系统--Step1类别管理
- 一步步打造基于ASP.NET的CMS内容管理系统--Step3 添加新闻页面
- 一步步打造基于ASP.NET的CMS内容管理系统--Step2 系统配置(附源代码)
- Umbraco一款开源的Asp.net CMS 内容管理系统
- PlugNT CMS(自己开发的Asp.net内容管理系统)
- ASP.NET 内容管理系统 CMS 的体系结构
- ASP.net中基于RBAC的通用权限管理系统
- 国内外一些知名asp.net CMS内容管理系统
- ASP.NET 5个著名内容管理系统CMS
- Orchard 基于 ASP.NET MVC 技术的免费开源内容管理系统
- 【商业版、提供全部源码】基于RBAC的C#ASP.NET支持多用户的通用权限管理系统高质量源码10月份销售20套【提供操作手册设计文档下载】
- 采用ASP.NET开发的5个著名内容管理系统CMS
- OXite 微软一款基于asp.net mvc架构的blog内容管理系统
- 【商业版、提供全部源码】基于RBAC的C#ASP.NET支持多用户的通用权限管理系统高质量源码10月份销售20套
- 通用权限管理系统[基于asp.net(c# 4.0) + MVC 4 + extjs 4.2 + PetaPoco](一、搭架子 - 有源码)
- Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载
- asp.net core 身份认证/权限管理系统简介及简单案例
- 用户权限设计 ASP.NET系统用户权限设计与实现、用户认证管理设计方案、通用数据权限管理系统设计
- 【商业版】C# ASP.NET 通用权限管理系统组件源码中的数据库访问组件可以全面支持Access单机数据库了
- C# ASP.NET 通用权限管理系统组件源码中WCF例子程序服务器端运行详细配置参考