PageRenderTime 50ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/CmsData/CMSRoleProvider.cs

https://github.com/vs06/bvcms
C# | 149 lines | 130 code | 13 blank | 6 comment | 22 complexity | e289ba5728883ce3dd9774856b2816bb MD5 | raw file
  1. /* Author: David Carroll
  2. * Copyright (c) 2008, 2009 Bellevue Baptist Church
  3. * Licensed under the GNU General Public License (GPL v2)
  4. * you may not use this code except in compliance with the License.
  5. * You may obtain a copy of the License at http://bvcms.codeplex.com/license
  6. */
  7. using System;
  8. using System.Web.Security;
  9. using System.Collections.Specialized;
  10. using UtilityExtensions;
  11. using System.Linq;
  12. using CmsData;
  13. using System.Web;
  14. using System.Web.Caching;
  15. using System.Collections.Generic;
  16. namespace CmsData
  17. {
  18. public class CMSRoleProvider : RoleProvider
  19. {
  20. public static CMSRoleProvider provider
  21. {
  22. get { return Roles.Provider as CMSRoleProvider; }
  23. }
  24. public override string ApplicationName { get { return "cms"; } set { } }
  25. public override void Initialize(string name, NameValueCollection config)
  26. {
  27. if (config == null)
  28. throw new ArgumentNullException("config");
  29. if (name == null || name.Length == 0)
  30. name = "CMSRoleProvider";
  31. if (String.IsNullOrEmpty(config["description"]))
  32. {
  33. config.Remove("description");
  34. config.Add("description", "CMS Role provider");
  35. }
  36. base.Initialize(name, config);
  37. }
  38. public override void AddUsersToRoles(string[] usernames, string[] rolenames)
  39. {
  40. var qu = DbUtil.Db.Users.Where(u => usernames.Contains(u.Username));
  41. var qr = DbUtil.Db.Roles.Where(r => rolenames.Contains(r.RoleName));
  42. foreach (var user in qu)
  43. foreach (var role in qr)
  44. user.UserRoles.Add(new UserRole { Role = role });
  45. DbUtil.Db.SubmitChanges();
  46. }
  47. public override void CreateRole(string rolename)
  48. {
  49. DbUtil.Db.Roles.InsertOnSubmit(new Role { RoleName = rolename });
  50. DbUtil.Db.SubmitChanges();
  51. }
  52. public override bool DeleteRole(string rolename, bool throwOnPopulatedRole)
  53. {
  54. var role = DbUtil.Db.Roles.Single(r => r.RoleName == rolename);
  55. DbUtil.Db.UserRoles.DeleteAllOnSubmit(role.UserRoles);
  56. DbUtil.Db.Roles.DeleteOnSubmit(role);
  57. DbUtil.Db.SubmitChanges();
  58. return true;
  59. }
  60. public override string[] GetAllRoles()
  61. {
  62. return DbUtil.Db.Roles.Select(r => r.RoleName).ToArray();
  63. }
  64. public override string[] GetRolesForUser(string username)
  65. {
  66. username = Util.GetUserName(username);
  67. var q = from r in DbUtil.Db.UserRoles
  68. where r.User.Username == username
  69. select r.Role.RoleName;
  70. return q.ToArray();
  71. }
  72. public override string[] GetUsersInRole(string rolename)
  73. {
  74. var q = from u in DbUtil.Db.Users
  75. where u.UserRoles.Any(ur => ur.Role.RoleName == rolename)
  76. select u.Username;
  77. return q.ToArray();
  78. }
  79. public IEnumerable<User> GetRoleUsers(string rolename)
  80. {
  81. var q = from u in DbUtil.Db.Users
  82. where u.UserRoles.Any(ur => ur.Role.RoleName == rolename)
  83. select u;
  84. return q;
  85. }
  86. public IEnumerable<Person> GetAdmins()
  87. {
  88. return GetRoleUsers("Admin").Select(u => u.Person).Distinct();
  89. }
  90. public IEnumerable<Person> GetFinance()
  91. {
  92. return GetRoleUsers("Finance").Select(u => u.Person).Distinct();
  93. }
  94. public IEnumerable<Person> GetDevelopers()
  95. {
  96. return GetRoleUsers("Developer").Select(u => u.Person);
  97. }
  98. public override bool IsUserInRole(string username, string rolename)
  99. {
  100. username = Util.GetUserName(username);
  101. var q = from ur in DbUtil.Db.UserRoles
  102. where rolename == ur.Role.RoleName
  103. where username == ur.User.Username
  104. select ur;
  105. return q.Count() > 0;
  106. }
  107. public override void RemoveUsersFromRoles(string[] usernames, string[] rolenames)
  108. {
  109. var q = from ur in DbUtil.Db.UserRoles
  110. where rolenames.Contains(ur.Role.RoleName) && usernames.Contains(ur.User.Username)
  111. select ur;
  112. DbUtil.Db.UserRoles.DeleteAllOnSubmit(q);
  113. DbUtil.Db.SubmitChanges();
  114. }
  115. public override bool RoleExists(string rolename)
  116. {
  117. return DbUtil.Db.Roles.Count(r => r.RoleName == rolename) > 0;
  118. }
  119. public override string[] FindUsersInRole(string rolename, string usernameToMatch)
  120. {
  121. var q = from u in DbUtil.Db.Users
  122. where u.UserRoles.Any(ur => ur.Role.RoleName == rolename)
  123. select u;
  124. bool left = usernameToMatch.StartsWith("%");
  125. bool right = usernameToMatch.EndsWith("%");
  126. usernameToMatch = usernameToMatch.Trim('%');
  127. if (left && right)
  128. q = q.Where(u => u.Username.Contains(usernameToMatch));
  129. else if (left)
  130. q = q.Where(u => u.Username.EndsWith(usernameToMatch));
  131. else if (right)
  132. q = q.Where(u => u.Username.StartsWith(usernameToMatch));
  133. return q.Select(u => u.Username).ToArray();
  134. }
  135. }
  136. }