PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/BlogEngine/DotNetSlave.BusinessLogic/Providers/XmlProvider/Rights.cs

#
C# | 112 lines | 67 code | 24 blank | 21 comment | 2 complexity | e3a773629b292ba13015267630ae9e1e MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. namespace BlogEngine.Core.Providers
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Xml;
  9. using System.Security.Permissions;
  10. using System.Web;
  11. using System.Web.Hosting;
  12. using System.Web.Security;
  13. /// <summary>
  14. /// A storage provider for BlogEngine that uses XML files.
  15. /// <remarks>
  16. /// To build another provider, you can just copy and modify
  17. /// this one. Then add it to the web.config's BlogEngine section.
  18. /// </remarks>
  19. /// </summary>
  20. public partial class XmlBlogProvider : BlogProvider
  21. {
  22. /// <summary>
  23. /// Returns a dictionary of right names and the roles associated with them.
  24. /// </summary>
  25. /// <returns></returns>
  26. public override IDictionary<string, IEnumerable<string>> FillRights()
  27. {
  28. var fullyQualifiedPath = string.Format("{0}rights.xml", this.Folder);
  29. //var fullyQualifiedPath =
  30. // VirtualPathUtility.Combine(
  31. // VirtualPathUtility.AppendTrailingSlash(HttpRuntime.AppDomainAppVirtualPath), path);
  32. //fullyQualifiedPath = HostingEnvironment.MapPath(fullyQualifiedPath);
  33. var rightsDict = new Dictionary<string, IEnumerable<string>>();
  34. if (File.Exists(fullyQualifiedPath))
  35. {
  36. // Make sure we have permission to read the XML data source and
  37. // throw an exception if we don't
  38. var permission = new FileIOPermission(FileIOPermissionAccess.Write, fullyQualifiedPath);
  39. permission.Demand();
  40. var doc = new XmlDocument();
  41. doc.Load(fullyQualifiedPath);
  42. foreach (XmlNode rightNode in doc.GetElementsByTagName("right"))
  43. {
  44. var rightName = rightNode.Attributes["name"].Value;
  45. var roleList = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
  46. foreach (XmlNode roleNode in rightNode.ChildNodes)
  47. {
  48. if (roleNode.Name.Equals("role", StringComparison.OrdinalIgnoreCase))
  49. {
  50. var roleName = roleNode.Attributes["name"].Value;
  51. roleName = roleName.Trim();
  52. roleList.Add(roleName);
  53. }
  54. }
  55. rightsDict.Add(rightName, roleList);
  56. }
  57. }
  58. return rightsDict;
  59. }
  60. /// <summary>
  61. /// Saves the current BlogEngine rights.
  62. /// </summary>
  63. /// <param name="rights"></param>
  64. public override void SaveRights(IEnumerable<Right> rights)
  65. {
  66. var fileName = string.Format("{0}rights.xml", this.Folder);
  67. var settings = new XmlWriterSettings { Indent = true };
  68. using (var writer = XmlWriter.Create(fileName, settings))
  69. {
  70. writer.WriteStartDocument(true);
  71. writer.WriteStartElement("rights");
  72. foreach (var right in rights)
  73. {
  74. writer.WriteStartElement("right");
  75. writer.WriteAttributeString("name", right.Name);
  76. foreach (var role in right.Roles)
  77. {
  78. writer.WriteStartElement("role");
  79. writer.WriteAttributeString("name", role);
  80. writer.WriteEndElement();
  81. }
  82. writer.WriteEndElement();
  83. }
  84. writer.WriteEndElement();
  85. }
  86. }
  87. }
  88. }