Merge pull request #2525 from umbraco/temp-U4-11020

U4-11020 Deleting a member group that is part of a Public Access feat…
This commit is contained in:
Robert
2018-03-21 13:47:02 +01:00
committed by GitHub
2 changed files with 28 additions and 22 deletions

View File

@@ -1,13 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Web.UI;
using umbraco;
using umbraco.BusinessLogic;
using umbraco.interfaces;
using Umbraco.Web.umbraco.presentation.umbraco.create;
namespace Umbraco.Tests.UI
{

View File

@@ -1,45 +1,53 @@
using System;
using System.Data;
using System.Linq;
using System.Web.Security;
using Umbraco.Web.UI;
using umbraco.BusinessLogic;
using umbraco.DataLayer;
using umbraco.BasePages;
using Umbraco.Core.IO;
using umbraco.cms.businesslogic.member;
using Umbraco.Web.UI;
namespace umbraco
namespace Umbraco.Web.umbraco.presentation.umbraco.create
{
public class MemberGroupTasks : LegacyDialogTask
{
public override bool PerformSave()
{
Roles.CreateRole(Alias);
_returnUrl = string.Format("members/EditMemberGroup.aspx?id={0}", System.Web.HttpContext.Current.Server.UrlEncode(Alias));
_returnUrl = $"members/EditMemberGroup.aspx?id={System.Web.HttpContext.Current.Server.UrlEncode(Alias)}";
return true;
}
public override bool PerformDelete()
{
var roleDeleted = false;
// only built-in roles can be deleted
if (Member.IsUsingUmbracoRoles())
{
MemberGroup.GetByName(Alias).delete();
return true;
roleDeleted = Roles.DeleteRole(Alias);
}
return false;
// Need to delete the member group from any content item that has it assigned in public access settings
var publicAccessService = UmbracoContext.Current.Application.Services.PublicAccessService;
var allPublicAccessRules = publicAccessService.GetAll();
// Find only rules which have the current role name (alias) assigned to them
var rulesWithDeletedRoles = allPublicAccessRules.Where(x => x.Rules.Any(r => r.RuleValue == Alias));
var contentService = UmbracoContext.Current.Application.Services.ContentService;
foreach (var publicAccessEntry in rulesWithDeletedRoles)
{
var contentItem = contentService.GetById(publicAccessEntry.ProtectedNodeId);
var rulesToDelete = publicAccessEntry.Rules.ToList();
foreach (var rule in rulesToDelete)
publicAccessService.RemoveRule(contentItem, rule.RuleType, rule.RuleValue);
}
return roleDeleted;
}
private string _returnUrl = "";
public override string ReturnUrl
{
get { return _returnUrl; }
}
public override string ReturnUrl => _returnUrl;
public override string AssignedApp
{
get { return DefaultApps.member.ToString(); }
}
public override string AssignedApp => DefaultApps.member.ToString();
}
}