using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Security.Principal; using System.Globalization; using System.Threading; using Tanshu.Accounts.Contracts; namespace Tanshu.Accounts.BI { public class AccountsIdentity : IIdentity { // the authentication type for us is always database private static string AuthenticationTypeString = "Database"; // hash table with all the user info we have private UserBO userInfo; // create the user identity; all user information is in the // hashtable passed along private AccountsIdentity(UserBO UserInfo) { this.userInfo = UserInfo; } //create a user identity and return it to the caller public static AccountsIdentity CreateUserIdentity(UserBO UserInfo) { return new AccountsIdentity(UserInfo); } // returns the name of the identity public string Name { get { return UserInfo.Name; } } // returns the userID of the identity public UserBO UserInfo { get { return userInfo; } } // returns whether or not identity is authenticated public bool IsAuthenticated { get { return true; } } // the type of authentication public string AuthenticationType { get { return AuthenticationTypeString; } } } public class AccountsPrincipal : IPrincipal { // stores the list of roles user has private string[] userRoles; // the user identity we create and associate with this principal private AccountsIdentity userIdentity; // constructor: stores role and permission info and creates // custom identity private AccountsPrincipal(string[] userRoles, UserBO userInfo) { this.userRoles = userRoles; // creates the IIdentity for the user and associates it with // this IPrincipal userIdentity = AccountsIdentity.CreateUserIdentity(userInfo); } // create the security principal and return it to the caller public static AccountsPrincipal CreateAccountsPrincipal(string[] userRoles, UserBO userInfo) { return new AccountsPrincipal(userRoles, userInfo); } // returns the Identity object associated with the principal public IIdentity Identity { get { return userIdentity; } } // checks whether user belongs to role public bool IsInRole(string Role) { //return userRoles.Where(ur => ur.ToLower() == Role.ToLower()).Count() > 1; return (userRoles.Where(ur => ur.Trim().ToLower() == Role.Trim().ToLower()).Count() > 0 ? true : false); } } public static class CurrentUser { public static UserBO user { get { AccountsIdentity identity = (AccountsIdentity)Thread.CurrentPrincipal.Identity; return identity.UserInfo; } } } }