温馨提示:代码在线浏览功能只能做为源码浏览参考,如果想更进一步了解该代码请下载: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
10
using System; 11
using System.IO; 12
using System.Configuration.Provider; 13
using System.Collections.Generic; 14
using System.Web; 15
using System.Web.Security; 16
using System.Xml.Serialization; 17
18
namespace 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




