| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Security.Principal;
- using System.Web;
- using System.Web.Script.Serialization;
- using System.Web.Security;
- namespace CallCenterApi.Interface.Models.Common
- {
- public class FormsPrincipal<TUserData> : IPrincipal
- where TUserData : class, new()
- {
- private IIdentity _identity;
- private TUserData _userData;
- public FormsPrincipal(FormsAuthenticationTicket ticket, TUserData userData)
- {
- if (ticket == null)
- throw new ArgumentNullException("ticket");
- if (userData == null)
- throw new ArgumentNullException("userData");
- _identity = new FormsIdentity(ticket);
- _userData = userData;
- }
- public TUserData UserData
- {
- get { return _userData; }
- }
- public IIdentity Identity
- {
- get { return _identity; }
- }
- public bool IsInRole(string role)
- {
- // 把判断用户组的操作留给UserData去实现。
- IPrincipal principal = _userData as IPrincipal;
- if (principal == null)
- throw new NotImplementedException();
- else
- return principal.IsInRole(role);
- }
- /// <summary>
- /// 执行用户登录操作
- /// </summary>
- /// <param name="loginName">登录名</param>
- /// <param name="userData">与登录名相关的用户信息</param>
- /// <param name="expiration">登录Cookie的过期时间,单位:分钟。</param>
- public static string GetCookieValue(string loginName, TUserData userData)
- {
- if (string.IsNullOrEmpty(loginName))
- throw new ArgumentNullException("loginName");
- if (userData == null)
- throw new ArgumentNullException("userData");
- // 1. 把需要保存的用户数据转成一个字符串。
- string data = null;
- if (userData != null)
- data = (new JavaScriptSerializer()).Serialize(userData);
- // 2. 创建一个FormsAuthenticationTicket,它包含登录名以及额外的用户数据。
- FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
- 2, loginName, DateTime.Now, DateTime.Now.AddDays(1), true, data);
- // 3. 加密Ticket,变成一个加密的字符串。
- return FormsAuthentication.Encrypt(ticket);
- }
- }
- }
|