1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Web;
5
using System.Web.Security;
6
using System.IO;
7
using System.Collections.Specialized;
8
9
namespace MOSSSecurity
10
{
11
public class TextFileMembershipProvider : MembershipProvider
12
{
13
private String _sFilePath = "";
14
15
public String FilePath
16
{
17
get { return _sFilePath; }
18
}
19
20
private IDictionary<String, String> LoadAllUsers()
21
22
if (String.IsNullOrEmpty(this.FilePath))
23
{
24
throw new InvalidOperationException("FilePath is not set.");
25
}
26
27
28
Dictionary<String, String> result = new Dictionary<String, String>();
29
30
StreamReader reader = new StreamReader(FilePath, Encoding.Default);
31
while (true)
32
33
String sLine = reader.ReadLine();
34
if (sLine == null)
35
{
36
break;
37
}
38
if (sLine.Trim().Length == 0)
39
40
continue;
41
42
String[] line = sLine.Split(':');
43
result.Add(line[0], line[1]);
44
45
46
return result;
47
48
49
private void WriteAllUsers(IDictionary<String, String> users)
50
51
52
53
54
55
56
using (StreamWriter writer = new StreamWriter(this.FilePath, false))
57
58
foreach (String userId in users.Keys)
59
60
writer.WriteLine(userId + ":" + users[userId]);
61
62
63
64
65
public override void Initialize(string name, NameValueCollection config)
66
67
base.Initialize(name, config);
68
69
_sFilePath = config["filePath"];
70
71
72
public override string ApplicationName
73
74
get
75
76
return "/";
77
78
set
79
80
81
82
83
84
public override bool ChangePassword(string username, string oldPassword, string newPassword)
85
86
return true;
87
88
89
public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
90
91
92
93
94
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
95
96
IDictionary<String, String> users = this.LoadAllUsers();
97
if (users.ContainsKey(username))
98
99
status = MembershipCreateStatus.DuplicateUserName;
100
return null;
101
102
103
users.Add(username, password);
104
this.WriteAllUsers(users);
105
106
status = MembershipCreateStatus.Success;
107
108
MembershipUser user = new MembershipUser(this.Name, username, username, email, passwordQuestion, "", isApproved, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
109
return user;
110
111
112
public override bool DeleteUser(string username, bool deleteAllRelatedData)
113
114
115
116
117
users.Remove(username);
118
this.WriteAllUsers(users);
119
return true;
120
121
else
122
123
return false;
124
125
126
127
public override bool EnablePasswordReset
128
129
get { return false; }
130
131
132
public override bool EnablePasswordRetrieval
133
134
135
136
137
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
138
139
totalRecords = 0;
140
return null;
141
142
143
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
144
145
MembershipUserCollection result = new MembershipUserCollection();
146
147
148
foreach (String username in users.Keys)
149
150
if (username.StartsWith(usernameToMatch))
151
152
result.Add(this.GetUser(usernameToMatch, false));
153
154
155
156
totalRecords = users.Count;
157
158
159
160
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
161
162
163
164
165
166
167
result.Add(this.GetUser(username, false));
168
169
170
171
172
173
174
public override int GetNumberOfUsersOnline()
175
176
return 0;
177
178
179
public override string GetPassword(string username, string answer)
180
181
return "";
182
183
184
public override MembershipUser GetUser(string username, bool userIsOnline)
185
186
187
188
189
MembershipUser result = new MembershipUser(this.Name, username, username, "", "", "", true, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
190
return result;
191
192
193
194
195
196
197
198
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
199
200
return this.GetUser(providerUserKey.ToString(), userIsOnline);
201
202
203
public override string GetUserNameByEmail(string email)
204
205
206
207
208
public override int MaxInvalidPasswordAttempts
209
210
get { return 999; }
211
212
213
public override int MinRequiredNonAlphanumericCharacters
214
215
get { return 0; }
216
217
218
public override int MinRequiredPasswordLength
219
220
get { return 1; }
221
222
223
public override int PasswordAttemptWindow
224
225
226
227
228
public override MembershipPasswordFormat PasswordFormat
229
230
get { return MembershipPasswordFormat.Clear; }
231
232
233
public override string PasswordStrengthRegularExpression
234
235
get { return ""; }
236
237
238
public override bool RequiresQuestionAndAnswer
239
240
241
242
243
public override bool RequiresUniqueEmail
244
245
246
247
248
public override string ResetPassword(string username, string answer)
249
250
251
252
253
public override bool UnlockUser(string userName)
254
255
256
257
258
public override void UpdateUser(MembershipUser user)
259
260
261
262
263
public override bool ValidateUser(string username, string password)
264
265
try
266
267
ExceptionMgt.Publish(new Exception(username + "|" + password));
268
269
IDictionary<String, String> users = this.LoadAllUsers();
270
if (!users.ContainsKey(username))
271
272
return false;
273
274
if (users[username] != password)
275
276
277
278
279
280
281
catch (Exception ex)
282
283
ExceptionMgt.Publish(ex);
284
285
286
287
}
288
}
289
本文轉自Jack Niu部落格園部落格,原文連結:http://www.cnblogs.com/skywind/archive/2007/04/03/697987.html,如需轉載請自行聯系原作者