您目前尚未登陆,请选择【登陆】或【注册
首页->全站代码->MyWebPages51aspx汉化最终版>>App-Code/Providers/CustomRoleProvider.cs>>源码在线查看
温馨提示:代码在线浏览功能只能做为源码浏览参考,如果想更进一步了解该代码请下载:MyWebPages51aspx汉化最终版
普通视图
		            
1//=============================================================================================== 2// 3// (c) Copyright Microsoft Corporation. 4// This source is subject to the Microsoft Permissive License. 5// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. 6// All other rights reserved. 7// 8//=============================================================================================== 9 10using System; 11using System.IO; 12using System.Configuration.Provider; 13using System.Collections.Generic; 14using System.Web; 15using System.Web.Security; 16using System.Xml.Serialization; 17 18namespace MyWebPagesStarterKit.Providers 19{ 20 /// <summary> 21 /// Specialized RoleProvider that uses a file (Roles.config) to store its data. 22 /// </summary> 23 public class CustomRoleProvider : RoleProvider 24 { 25 private String rolesfile; 26 private const string _cProviderName = "CustomRoleProvider"; 27 private const string _cRolesFilename = "Roles.config"; 28 29 private string _applicationName; 30 private List<RoleData> _roles; 31 32 public CustomRoleProvider() 33 { 34 rolesfile = HttpContext.Current.Server.MapPath(string.Format("~/App_Data/{0}", _cRolesFilename)); 35 } 36 37 public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 38 { 39 40 if (!WebSite.GetInstance().ReadyToUse) 41 throw new WebsiteNotReadyException("This website is not yet ready to use. Please verify that all required file/folders exist."); 42 43 if (config == null) 44 throw new ArgumentNullException("config"); 45 46 name = _cProviderName; 47 48 if (String.IsNullOrEmpty(config["description"])) 49 { 50 config.Remove("description"); 51 config.Add("description", "Xml membership provider"); 52 } 53 54 // Initialize the abstract base class. 55 base.Initialize(name, config); 56 57 _applicationName = getConfigValue(config["applicationName"], System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath); 58 59 //load/create the rolesfile 60 if (File.Exists(rolesfile)) 61 { 62 lock (rolesfile) 63 { 64 using (FileStream reader = File.Open(rolesfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 65 { 66 XmlSerializer serializer = new XmlSerializer(typeof(List<RoleData>)); 67 _roles = (List<RoleData>)serializer.Deserialize(reader); 68 } 69 } 70 } 71 else 72 { 73 _roles = new List<RoleData>(); 74 save(); 75 } 76 } 77 78 public override void AddUsersToRoles(string[] usernames, string[] roleNames) 79 { 80 foreach (string rolename in roleNames) 81 { 82 if (!RoleExists(rolename)) 83 { 84 throw new ProviderException("Role name not found."); 85 } 86 } 87 88 foreach (string username in usernames) 89 { 90 if (username.IndexOf(',') > 0) 91 { 92 throw new ArgumentException("User names cannot contain commas."); 93 } 94 95 foreach (string rolename in roleNames) 96 { 97 if (IsUserInRole(username, rolename)) 98 { 99 throw new ProviderException("User is already in role."); 100 } 101 } 102 } 103 104 foreach (string username in usernames) 105 { 106 foreach (string rolename in roleNames) 107 { 108 RoleData data = getRoleData(rolename); 109 if (data != null) 110 data.Users.Add(username); 111 } 112 } 113 save(); 114 } 115 116 public override string ApplicationName 117 { 118 get { return _applicationName; } 119 set { _applicationName = value; } 120 } 121 122 public override void CreateRole(string roleName) 123 { 124 if (roleName.IndexOf(',') > 0) 125 { 126 throw new ArgumentException("Role names cannot contain commas."); 127 } 128 129 if (RoleExists(roleName)) 130 { 131 throw new ProviderException("Role name already exists."); 132 } 133 RoleData rd = new RoleData(); 134 rd.RoleName = roleName; 135 rd.Users = new List<string>(); 136 _roles.Add(rd); 137 save(); 138 } 139 140 public override bool DeleteRole(string roleName, bool throwOnPopulatedRole) 141 { 142 if (!RoleExists(roleName)) 143 { 144 throw new ProviderException("Role does not exist."); 145 } 146 147 if (GetUsersInRole(roleName).Length > 0) 148 { 149 throw new ProviderException("Cannot delete a populated role."); 150 } 151 152 RoleData data = getRoleData(roleName); 153 154 if (data != null) 155 { 156 _roles.Remove(data); 157 save(); 158 return true; 159 } 160 else 161 { 162 return false; 163 } 164 } 165 166 public override string[] FindUsersInRole(string roleName, string usernameToMatch) 167 { 168 if (!RoleExists(roleName)) 169 { 170 throw new ProviderException("Role does not exist."); 171 } 172 173 RoleData data = getRoleData(roleName); 174 if (data != null) 175 { 176 return data.Users.ToArray(); 177 } 178 else 179 { 180 return new string[] { }; 181 } 182 } 183 184 public override string[] GetAllRoles() 185 { 186 string[] roles = new string[_roles.Count]; 187 for (int i = 0; i < _roles.Count; i++) 188 { 189 roles[i] = _roles[i].RoleName; 190 } 191 return roles; 192 } 193 194 public override string[] GetRolesForUser(string username) 195 { 196 List<string> foundRoles = new List<string>(); 197 foreach (RoleData data in _roles) 198 { 199 if (data.Users.Contains(username)) 200 foundRoles.Add(data.RoleName); 201 } 202 return foundRoles.ToArray(); 203 } 204 205 public override string[] GetUsersInRole(string roleName) 206 { 207 if (!RoleExists(roleName)) 208 { 209 throw new ProviderException("Role does not exist."); 210 } 211 return getRoleData(roleName).Users.ToArray(); 212 } 213 214 public override bool IsUserInRole(string username, string roleName) 215 { 216 if (!RoleExists(roleName)) 217 { 218 throw new ProviderException("Role does not exist."); 219 } 220 return getRoleData(roleName).Users.Contains(username); 221 } 222 223 public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) 224 { 225 foreach (string rolename in roleNames) 226 { 227 if (!RoleExists(rolename)) 228 { 229 throw new ProviderException("Role name not found."); 230 } 231 } 232 233 foreach (string rolename in roleNames) 234 { 235 RoleData data = getRoleData(rolename); 236 foreach (string username in usernames) 237 { 238 data.Users.Remove(username); 239 } 240 } 241 save(); 242 } 243 244 public override bool RoleExists(string roleName) 245 { 246 foreach (RoleData data in _roles) 247 { 248 if (data.RoleName.Equals(roleName, StringComparison.CurrentCulture)) 249 return true; 250 } 251 return false; 252 } 253 254 private string getConfigValue(string configValue, string defaultValue) 255 { 256 if (String.IsNullOrEmpty(configValue)) 257 return defaultValue; 258 else 259 return configValue; 260 } 261 262 private void save() 263 { 264 lock (rolesfile) 265 { 266 using (FileStream writer = File.Create(rolesfile)) 267 { 268 XmlSerializer serializer = new XmlSerializer(_roles.GetType()); 269 serializer.Serialize(writer, _roles); 270 } 271 } 272 } 273 274 private RoleData getRoleData(string rolename) 275