[转]在Asp.Net的论坛中实现角色机制

原创 2004年07月13日 15:18:00
构造类:
<?XML:NAMESPACE PREFIX = DIV&NBSP;STYLE='PADDING />

using System;
using System.Collections;
using System.Security.Principal;

namespace Wuyin.Forums.Components
{
    internal sealed class ForumsPrincipal : IPrincipal
    {
        private IIdentity _identity;
        private string [] _roles;

        public ForumsPrincipal(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 ) > 0 ? true : false;
        }
        public IIdentity Identity
        {
            get
            {
                return _identity;
            }
        }

        // Checks whether a principal is in all of the specified set of roles
        public bool IsInAllRoles( params string [] roles )
        {
            foreach (string searchrole in roles )
            {
                if (Array.BinarySearch(_roles, searchrole) < 0 )
                    return false;
            }
            return true;
        }
        // Checks whether a principal is in any of the specified set of roles
        public bool IsInAnyRoles( params string [] roles )
        {
            foreach (string searchrole in roles )
            {
                if (Array.BinarySearch(_roles, searchrole ) > 0 )
                    return true;
            }
            return false;
        }
    }
}


UserRole类:
using System;
using System.Web;
using System.Web.Security;


namespace Wuyin.Forums
{
    /// <summary>
    /// UserRoles 的摘要说明。
    /// </summary>
    public class UserRoles
    {
        public UserRoles()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            string cookieName = FormsAuthentication.FormsCookieName;
            HttpCookie authCookie = System.Web.HttpContext.Current.Request.Cookies[cookieName];

            if(null == authCookie)
            {
                // There is no authentication cookie.
                return;
            } 

            FormsAuthenticationTicket authTicket = null;
            try
            {
                authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            }
            catch
            {
                // Log exception details (omitted for simplicity)
                return;
            }

            if (null == authTicket)
            {
                // Cookie failed to decrypt.
                return;
            }

            // When the ticket was created, the UserData property was assigned a
            // pipe delimited string of role names.
            string[] roles = authTicket.UserData.Split('$');

            // Create an Identity object
            FormsIdentity id = new FormsIdentity( authTicket ); 

            // This principal will flow throughout the request.
            Wuyin.Forums.Components.ForumsPrincipal  principal = new Wuyin.Forums.Components.ForumsPrincipal(id, roles);
            // Attach the new principal object to the current HttpContext object
            System.Web.HttpContext.Current.User = principal;
        }
        public static void AddForumToRole(int forumID, string role)
        {
        }
        public static void AddUserToRole(string username, string role)
        {

        }
        public static void CreateNewRole(string role, string description)
        {

        }
        public static void DeleteRole(string role)
        {

        }
        public static string[] GetAllRoles()
        {
            //Wuyin.Forums.Data.SqlDataProvider Wuyin.Forums.Data.DataProvider.Instance().= new Wuyin.Forums.Data.SqlDataProvider();
            string[] s = Wuyin.Forums.Data.DataProvider.Instance().GetAllRoles();
//            Wuyin.Forums.Data.DataProvider.Instance().Dispose();
            return s;
        }
        public static string[] GetForumRoles(int forumID)
        {
            //Wuyin.Forums.Data.SqlDataProvider Wuyin.Forums.Data.DataProvider.Instance().= new Wuyin.Forums.Data.SqlDataProvider();
            string[] s = Wuyin.Forums.Data.DataProvider.Instance().GetForumRoles(forumID);
            //Wuyin.Forums.Data.DataProvider.Instance().Dispose();
            return s;
        }
        public static string GetRoleDescription(string role)
        {
            //Wuyin.Forums.Data.SqlDataProvider Wuyin.Forums.Data.DataProvider.Instance().= new Wuyin.Forums.Data.SqlDataProvider();
            string s = Wuyin.Forums.Data.DataProvider.Instance().GetRoleDescription(role).Get("Description").ToString();
//            Wuyin.Forums.Data.DataProvider.Instance().Dispose();
            return s;
        }
        public void GetUserRoles()
        {
            string roles="";
            string[] userRoles = UserRoles.GetAllRoles();
            for(int i=0;i<userRoles.Length;i++)
            {
                roles+=userRoles[i];
                if(i<userRoles.Length)
                    roles+="$";
            }
            //this.Controls.Add(new System.Web.UI.LiteralControl(roles));
            //return;
            // Create the authentication ticket
            FormsAuthenticationTicket authTicket = new 
                FormsAuthenticationTicket(1,null,DateTime.Now,DateTime.MaxValue,true,roles);                    // User data
            // Now encrypt the ticket.
            string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
            // Create a cookie and add the encrypted ticket to the 
            // cookie as data.
            HttpCookie rolesCookie = new HttpCookie("WuyinForumsRoles",encryptedTicket);
            System.Web.HttpContext.Current.Response.Cookies.Add(rolesCookie); 

        }
        public static string[] GetUserRoles(string username)
        {
                //Wuyin.Forums.Data.SqlDataProvider Wuyin.Forums.Data.DataProvider.Instance().= new Wuyin.Forums.Data.SqlDataProvider();
                string[] s = Wuyin.Forums.Data.DataProvider.Instance().GetUserRoles(username);
                //Wuyin.Forums.Data.DataProvider.Instance().Dispose();
                return s;
        }
        public static void RemoveForumFromRole(int forumID, string role)
        {

        }
        public static void RemoveUserFromRole(string username, string role)
        {

        }
        public static void SignOut()
        {
            FormsAuthentication.SignOut();
        }
        public static void UpdateRole(string role, string description)
        {

        }
    }
}


在Global.asax中:

<script language="C#" runat="server">
    void Application_AuthenticateRequest(Object sender, EventArgs e) 
    {
      UserRoles forumRoles = new UserRoles();
      forumRoles.GetUserRoles();
    }
</script>
&NBSP;STYLE='PADDING:&NBSP;10PX;&NBSP;BACKGROUND-COLOR:&NBSP;#FFFFE1;&NBSP;BORDER:&NBSP;1PX&NBSP;BLACK&NBSP;SOLID;'>
&NBSP;STYLE='PADDING:&NBSP;10PX;&NBSP;BACKGROUND-COLOR:&NBSP;#FFFFE1;&NBSP;BORDER:&NBSP;1PX&NBSP;BLACK&NBSP;SOLID;'>
&NBSP;STYLE='PADDING:&NBSP;10PX;&NBSP;BACKGROUND-COLOR:&NBSP;#FFFFE1;&NBSP;BORDER:&NBSP;1PX&NBSP;BLACK&NBSP;SOLID;'>

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

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

ASP.NET Membership和角色管理器

实习期的总结。
  • hellobabygogo3
  • hellobabygogo3
  • 2014年07月17日 14:39
  • 3052

asp.net core mvc权限控制:权限控制介绍

在进行业务软件开发的时候,都会涉及到权限控制的问题,asp.net core mvc提供了相关特性。 在具体介绍使用方法前,我们需要先了解几个概念: 1,claim:英文翻译过来是声明的意思,一个cl...
  • dxp909
  • dxp909
  • 2017年02月11日 09:17
  • 1171

Asp.Net底层解析(一)——常规ASPX页面的实现机制

前言:对于像ASP.NET这样的Web开发框架,我想绝大多数程序员都是像我一样,先学会怎么用,接下来在做项目的过程中逐渐积累“怎样用对”的经验,积累到一定量之后就会开始思考“为什么要这样写”、“怎样写...
  • mlcactus
  • mlcactus
  • 2013年02月01日 23:20
  • 2622

ASP.NET MVC程序权限控制解决方案(一)

1.  什么是权限?? l  权限跟用户登录是没有任何关系的,但是要用到用户的数据,权限就是在请求我们系统的一个服务(请求地址,请求方法,请求Action,请求WebService等)的时候,当在请...
  • yiwuxun
  • yiwuxun
  • 2014年10月29日 22:17
  • 2115

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

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

asp.net core mvc权限控制:分配权限

前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident...
  • c2iekqea
  • c2iekqea
  • 2017年02月12日 19:07
  • 986

ASP.NET WEBAPI 的身份验证和授权

身份验证(Authentication):确定用户是谁。 授权(Authorization):确定用户能做什么,不能做什么。 身份验证 WebApi 假定身份验证发生在宿主程序称中。...
  • u013948181
  • u013948181
  • 2017年03月06日 20:06
  • 2697

ASP.net MVC 基于角色的权限控制系统的实现

一、引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法。 下面是最常见的实现方式: public ...
  • jiangfei009003
  • jiangfei009003
  • 2014年08月06日 09:42
  • 2625

HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】

转自:http://www.uml.org.cn/net/201306193.asp 前言 前一段在整理邮件的时候发现几年前和CDD老师交流时的一份邮件.下面是简单摘要: “从技术角...
  • chelen_jak
  • chelen_jak
  • 2015年11月25日 18:13
  • 2356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转]在Asp.Net的论坛中实现角色机制
举报原因:
原因补充:

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