From a7de549e4fc209bd98e05c90eae4e6f05dc168e4 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 27 Jan 2015 20:32:45 +1100 Subject: [PATCH] Got xml public access structure being migrated to db now - need to do a check it hasn't already been migrated now. --- src/Umbraco.Core/Constants-Conventions.cs | 6 + .../Expressions/InsertDataExpression.cs | 1 + .../AddPublicAccessTables.cs | 107 ++++++++++++++++++ .../AddRelationTypeForDocumentOnDelete.cs | 20 ++-- 4 files changed, 127 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Core/Constants-Conventions.cs b/src/Umbraco.Core/Constants-Conventions.cs index bcf012e42f..bad572fe0c 100644 --- a/src/Umbraco.Core/Constants-Conventions.cs +++ b/src/Umbraco.Core/Constants-Conventions.cs @@ -11,6 +11,12 @@ namespace Umbraco.Core /// public static class Conventions { + public static class PublicAccess + { + public const string MemberIdClaimType = "MemberId"; + public const string MemberGroupClaimType = "MemberGroup"; + } + public static class Localization { /// diff --git a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs b/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs index b9f076ac7f..330e22bb93 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Syntax/Insert/Expressions/InsertDataExpression.cs @@ -63,6 +63,7 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Insert.Expressions private string GetQuotedValue(object val) { var type = val.GetType(); + switch (Type.GetTypeCode(type)) { case TypeCode.Boolean: diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddPublicAccessTables.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddPublicAccessTables.cs index 0ab2e683b8..52582998f5 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddPublicAccessTables.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddPublicAccessTables.cs @@ -1,9 +1,116 @@ +using System; +using System.IO; using System.Linq; +using System.Xml.Linq; using Umbraco.Core.Configuration; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; +using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.DatabaseModelDefinitions; namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZero { + [Migration("7.3.0", 7, GlobalSettings.UmbracoMigrationName)] + public class MovePublicAccessXmlDataToDb : MigrationBase + { + public override void Up() + { + var xmlFile = IOHelper.MapPath(SystemFiles.AccessXml); + using (var fileStream = File.OpenRead(xmlFile)) + { + var xml = XDocument.Load(fileStream); + + foreach (var page in xml.Root.Elements("page")) + { + var pageId = (int?) page.Attribute("id"); + var loginPageId = (int?) page.Attribute("loginPage"); + var noRightsPageId = (int?)page.Attribute("noRightsPage"); + if (pageId.HasValue == false || loginPageId.HasValue == false || noRightsPageId.HasValue == false) + continue; + + //ensure this page exists! + var umbracoNode = Context.Database.FirstOrDefault("WHERE id = @Id", new {Id = pageId.Value}); + if (umbracoNode != null) + { + var loginNode = Context.Database.FirstOrDefault("WHERE id = @Id", new { Id = loginPageId.Value }); + if (loginNode != null) + { + var noRightsPage = Context.Database.FirstOrDefault("WHERE id = @Id", new { Id = noRightsPageId.Value }); + if (noRightsPage != null) + { + var accessId = Guid.NewGuid(); + Insert.IntoTable("umbracoAccess").Row(new + { + id = accessId, + nodeId = umbracoNode.UniqueId, + loginNodeId = loginNode.UniqueId, + noAccessNodeId = noRightsPage.UniqueId, + createDate = DateTime.Now, + updateDate = DateTime.Now + }); + + //if a memberId has been specified, then add that as a rule + var memberId = (string) page.Attribute("memberId"); + if (memberId.IsNullOrWhiteSpace() == false) + { + Insert.IntoTable("umbracoAccessRule").Row(new + { + id = Guid.NewGuid(), + accessId = accessId, + claim = memberId, + claimType = Constants.Conventions.PublicAccess.MemberIdClaimType, + createDate = DateTime.Now, + updateDate = DateTime.Now + }); + } + + //now there should be a member group defined here + var memberGroupElement = page.Element("group"); + if (memberGroupElement != null) + { + var memberGroup = (string)memberGroupElement.Attribute("id"); + if (memberGroup.IsNullOrWhiteSpace() == false) + { + //create a member group rule + Insert.IntoTable("umbracoAccessRule").Row(new + { + id = Guid.NewGuid(), + accessId = accessId, + claim = memberGroup, + claimType = Constants.Conventions.PublicAccess.MemberGroupClaimType, + createDate = DateTime.Now, + updateDate = DateTime.Now + }); + } + } + + } + else + { + Logger.Warn("No umbracoNode could be found with id " + noRightsPageId.Value); + } + } + else + { + Logger.Warn("No umbracoNode could be found with id " + loginPageId.Value); + } + + } + else + { + Logger.Warn("No umbracoNode could be found with id " + pageId.Value); + } + } + + } + + } + + public override void Down() + { + } + } + [Migration("7.3.0", 6, GlobalSettings.UmbracoMigrationName)] public class AddPublicAccessTables : MigrationBase { diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddRelationTypeForDocumentOnDelete.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddRelationTypeForDocumentOnDelete.cs index c656376a9f..8e3cddf8b7 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddRelationTypeForDocumentOnDelete.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/AddRelationTypeForDocumentOnDelete.cs @@ -9,14 +9,20 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe { public override void Up() { - Insert.IntoTable("umbracoRelationType").Row(new + var exists = Context.Database.FirstOrDefault("WHERE alias=@alias", new {alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias}); + if (exists == null) { - dual = false, - parentObjectType = Guid.Parse(Constants.ObjectTypes.Document), - childObjectType = Guid.Parse(Constants.ObjectTypes.Document), - name = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteName, - alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias - }); + Insert.IntoTable("umbracoRelationType").Row(new + { + dual = false, + parentObjectType = Guid.Parse(Constants.ObjectTypes.Document), + childObjectType = Guid.Parse(Constants.ObjectTypes.Document), + name = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteName, + alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias + }); + } + + }