From 8ecd5db459633d08c5b86bd2b1c1f94012b1029b Mon Sep 17 00:00:00 2001 From: Gerard Smit Date: Wed, 11 Oct 2023 20:11:58 +0200 Subject: [PATCH 1/5] Add IPermissionService for Abstractions Project Fixes #5840 Co-authored-by: Brian Dukes --- .../Permissions/IPermissionDefinitionInfo.cs | 24 ++++ .../Security/Permissions/IPermissionInfo.cs | 27 ++++ .../Permissions/IPermissionService.cs | 69 +++++++++ .../Permissions/PermissionController.cs | 134 +++++++++++++++--- .../Security/Permissions/PermissionInfo.cs | 54 ++++--- .../Permissions/PermissionInfoBase.cs | 37 +++-- DNN Platform/Library/Startup.cs | 4 + .../Components/PermissionHelper.cs | 21 ++- .../Services/Dto/FolderPermissions.cs | 39 +++-- .../Services/Dto/Permissions.cs | 25 ++-- .../Services/ItemsController.cs | 11 +- 11 files changed, 361 insertions(+), 84 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs new file mode 100644 index 00000000000..eb5cd5a4437 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Security.Permissions; + +/// PermissionInfo provides the Entity Layer for Permissions. +public interface IPermissionDefinitionInfo +{ + /// Gets or sets the Mdoule Definition ID. + public int ModuleDefId { get; set; } + + /// Gets or sets the Permission Code. + public string PermissionCode { get; set; } + + /// Gets or sets the Permission ID. + public int PermissionId { get; set; } + + /// Gets or sets the Permission Key. + public string PermissionKey { get; set; } + + /// Gets or sets the Permission Name. + public string PermissionName { get; set; } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs new file mode 100644 index 00000000000..f67359b8540 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Security.Permissions; + +/// PermissionInfoBase provides a base class for PermissionInfo classes. +public interface IPermissionInfo : IPermissionDefinitionInfo +{ + /// Gets or sets a value indicating whether gets and sets a flag that indicates whether the user or role has permission. + bool AllowAccess { get; set; } + + /// Gets or sets the User's DisplayName. + string DisplayName { get; set; } + + /// Gets or sets the Role ID. + int RoleId { get; set; } + + /// Gets or sets the Role Name. + string RoleName { get; set; } + + /// Gets or sets the User ID. + int UserId { get; set; } + + /// Gets or sets the User Name. + string Username { get; set; } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs new file mode 100644 index 00000000000..ec2a40eaa47 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Security.Permissions; + +using System.Collections.Generic; + +/// Handles the Business Control Layer for Permissions. +public interface IPermissionService +{ + /// Gets the permissions. + /// The permissions. + IEnumerable GetDefinitions(); + + /// Gets the permissions by folder. + /// The permissions by folder. + IEnumerable GetDefinitionsByFolder(); + + /// Gets the permissions by desktop module. + /// The permissions by desktop module. + IEnumerable GetDefinitionsByPortalDesktopModule(); + + /// Gets the permissions by tab. + /// The permissions by tab. + IEnumerable GetDefinitionsByTab(); + + /// Gets the permissions by and . + /// The permission code. + /// The permission key. + /// The permissions by tab. + IEnumerable GetDefinitionsByCodeAndKey(string permissionCode, string permissionKey); + + /// Gets the permissions by . + /// The module definition ID. + /// The permissions by tab. + IEnumerable GetDefinitionsByModuleDefId(int moduleDefId); + + /// Gets the permissions by and for the given module in the tab. + /// The module ID. + /// The tab ID. + /// The permissions by tab. + IEnumerable GetDefinitionsByModule(int moduleId, int tabId); + + /// Adds a new permission. + /// The permission. + /// The new permission ID. + int AddDefinition(IPermissionDefinitionInfo permissionDefinition); + + /// Deletes an existing permission. + /// The permission to delete. + void DeleteDefinition(IPermissionDefinitionInfo permissionDefinition); + + /// Gets the permission by the . + /// The permission ID. + /// The permission. + IPermissionDefinitionInfo GetDefinition(int permissionDefinitionId); + + /// Updates an existing permission. + /// The permission. + void UpdateDefinition(IPermissionDefinitionInfo permission); + + /// Clears the permission definition cache. + /// + /// , and will clear the cache automatically. + /// This method is only needed if you want to clear the cache manually. + /// + void ClearCache(); +} diff --git a/DNN Platform/Library/Security/Permissions/PermissionController.cs b/DNN Platform/Library/Security/Permissions/PermissionController.cs index 284dc798f10..f9e47b50b56 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionController.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionController.cs @@ -9,6 +9,7 @@ namespace DotNetNuke.Security.Permissions using System.Linq; using System.Text; + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Data; @@ -19,7 +20,7 @@ namespace DotNetNuke.Security.Permissions using DotNetNuke.Security.Roles; using DotNetNuke.Services.Log.EventLog; - public partial class PermissionController + public partial class PermissionController : IPermissionService { private static readonly DataProvider Provider = DataProvider.Instance(); @@ -68,27 +69,40 @@ public static string BuildPermissions(IList permissions, string permissionKey) return permissionsString; } - public static ArrayList GetPermissionsByFolder() + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByFolder)} instead.")] + public static partial ArrayList GetPermissionsByFolder() { - return new ArrayList(GetPermissions().Where(p => p.PermissionCode == "SYSTEM_FOLDER").ToArray()); + return new ArrayList(GetPermissionsByFolderEnumerable().ToArray()); } - public static ArrayList GetPermissionsByPortalDesktopModule() + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByPortalDesktopModule)} instead.")] + public static partial ArrayList GetPermissionsByPortalDesktopModule() { - return new ArrayList(GetPermissions().Where(p => p.PermissionCode == "SYSTEM_DESKTOPMODULE").ToArray()); + return new ArrayList(GetPermissionsByPortalDesktopModuleEnumerable().ToArray()); } - public static ArrayList GetPermissionsByTab() + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByTab)} instead.")] + public static partial ArrayList GetPermissionsByTab() { - return new ArrayList(GetPermissions().Where(p => p.PermissionCode == "SYSTEM_TAB").ToArray()); + return new ArrayList(GetPermissionsByTabEnumerable().ToArray()); } + /// public int AddPermission(PermissionInfo permission) + { + return this.AddPermission((IPermissionDefinitionInfo)permission); + } + + /// + public int AddPermission(IPermissionDefinitionInfo permission) { EventLogController.Instance.AddLog(permission, PortalController.Instance.GetCurrentPortalSettings(), UserController.Instance.GetCurrentUserInfo().UserID, string.Empty, EventLogController.EventLogType.PERMISSION_CREATED); var permissionId = Convert.ToInt32(Provider.AddPermission( permission.PermissionCode, - permission.ModuleDefID, + permission.ModuleDefId, permission.PermissionKey, permission.PermissionName, UserController.Instance.GetCurrentUserInfo().UserID)); @@ -97,6 +111,7 @@ public int AddPermission(PermissionInfo permission) return permissionId; } + /// public void DeletePermission(int permissionID) { EventLogController.Instance.AddLog( @@ -109,36 +124,47 @@ public void DeletePermission(int permissionID) this.ClearCache(); } + /// public PermissionInfo GetPermission(int permissionID) { return GetPermissions().SingleOrDefault(p => p.PermissionID == permissionID); } - public ArrayList GetPermissionByCodeAndKey(string permissionCode, string permissionKey) + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByCodeAndKey)} instead.")] + public partial ArrayList GetPermissionByCodeAndKey(string permissionCode, string permissionKey) { - return new ArrayList(GetPermissions().Where(p => p.PermissionCode.Equals(permissionCode, StringComparison.InvariantCultureIgnoreCase) - && p.PermissionKey.Equals(permissionKey, StringComparison.InvariantCultureIgnoreCase)).ToArray()); + return new ArrayList(GetPermissionByCodeAndKeyEnumerable(permissionCode, permissionKey).ToArray()); } - public ArrayList GetPermissionsByModuleDefID(int moduleDefID) + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByModuleDefId)} instead.")] + public partial ArrayList GetPermissionsByModuleDefID(int moduleDefID) { - return new ArrayList(GetPermissions().Where(p => p.ModuleDefID == moduleDefID).ToArray()); + return new ArrayList(GetPermissionsByModuleDefIdEnumerable(moduleDefID).ToArray()); } - public ArrayList GetPermissionsByModule(int moduleId, int tabId) + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByModule)} instead.")] + public partial ArrayList GetPermissionsByModule(int moduleId, int tabId) { - var module = ModuleController.Instance.GetModule(moduleId, tabId, false); - - return new ArrayList(GetPermissions().Where(p => p.ModuleDefID == module.ModuleDefID || p.PermissionCode == "SYSTEM_MODULE_DEFINITION").ToArray()); + return new ArrayList(GetPermissionsByModuleEnumerable(moduleId, tabId).ToArray()); } + /// public void UpdatePermission(PermissionInfo permission) + { + this.UpdatePermission((IPermissionDefinitionInfo)permission); + } + + /// + public void UpdatePermission(IPermissionDefinitionInfo permission) { EventLogController.Instance.AddLog(permission, PortalController.Instance.GetCurrentPortalSettings(), UserController.Instance.GetCurrentUserInfo().UserID, string.Empty, EventLogController.EventLogType.PERMISSION_UPDATED); Provider.UpdatePermission( - permission.PermissionID, + permission.PermissionId, permission.PermissionCode, - permission.ModuleDefID, + permission.ModuleDefId, permission.PermissionKey, permission.PermissionName, UserController.Instance.GetCurrentUserInfo().UserID); @@ -214,6 +240,42 @@ public partial ArrayList GetPermissionsByModuleID(int moduleId) return this.GetPermissionsByModuleDefID(module.ModuleDefID); } + /// + IEnumerable IPermissionService.GetDefinitions() => GetPermissions(); + + /// + IEnumerable IPermissionService.GetDefinitionsByFolder() => GetPermissionsByFolderEnumerable(); + + /// + IEnumerable IPermissionService.GetDefinitionsByPortalDesktopModule() => GetPermissionsByPortalDesktopModuleEnumerable(); + + /// + IEnumerable IPermissionService.GetDefinitionsByTab() => GetPermissionsByTabEnumerable(); + + /// + IEnumerable IPermissionService.GetDefinitionsByCodeAndKey(string permissionCode, string permissionKey) => GetPermissionByCodeAndKeyEnumerable(permissionCode, permissionKey); + + /// + IEnumerable IPermissionService.GetDefinitionsByModuleDefId(int moduleDefId) => GetPermissionsByModuleDefIdEnumerable(moduleDefId); + + /// + IEnumerable IPermissionService.GetDefinitionsByModule(int moduleId, int tabId) => GetPermissionsByModuleEnumerable(moduleId, tabId); + + /// + int IPermissionService.AddDefinition(IPermissionDefinitionInfo permission) => this.AddPermission(permission); + + /// + void IPermissionService.DeleteDefinition(IPermissionDefinitionInfo permission) => this.DeletePermission(permission.PermissionId); + + /// + IPermissionDefinitionInfo IPermissionService.GetDefinition(int permissionDefinitionId) => this.GetPermission(permissionDefinitionId); + + /// + void IPermissionService.UpdateDefinition(IPermissionDefinitionInfo permission) => this.UpdatePermission(permission); + + /// + void IPermissionService.ClearCache() => this.ClearCache(); + private static IEnumerable GetPermissions() { return CBO.GetCachedObject>( @@ -224,6 +286,40 @@ private static IEnumerable GetPermissions() c => CBO.FillCollection(Provider.ExecuteReader("GetPermissions"))); } + private static IEnumerable GetPermissionsByFolderEnumerable() + { + return GetPermissions().Where(p => p.PermissionCode == "SYSTEM_FOLDER"); + } + + private static IEnumerable GetPermissionsByPortalDesktopModuleEnumerable() + { + return GetPermissions().Where(p => p.PermissionCode == "SYSTEM_DESKTOPMODULE"); + } + + private static IEnumerable GetPermissionsByTabEnumerable() + { + return GetPermissions().Where(p => p.PermissionCode == "SYSTEM_TAB"); + } + + private static IEnumerable GetPermissionByCodeAndKeyEnumerable(string permissionCode, string permissionKey) + { + return GetPermissions().Where(p => p.PermissionCode.Equals(permissionCode, StringComparison.InvariantCultureIgnoreCase) + && p.PermissionKey.Equals(permissionKey, StringComparison.InvariantCultureIgnoreCase)); + } + + private static IEnumerable GetPermissionsByModuleDefIdEnumerable(int moduleDefId) + { + return GetPermissions().Where(p => p.ModuleDefID == moduleDefId); + } + + private static IEnumerable GetPermissionsByModuleEnumerable(int moduleId, int tabId) + { + var module = ModuleController.Instance.GetModule(moduleId, tabId, false); + var moduleDefId = module.ModuleDefID; + + return GetPermissions().Where(p => p.ModuleDefID == moduleDefId || p.PermissionCode == "SYSTEM_MODULE_DEFINITION"); + } + private void ClearCache() { DataCache.RemoveCache(DataCache.PermissionsCacheKey); diff --git a/DNN Platform/Library/Security/Permissions/PermissionInfo.cs b/DNN Platform/Library/Security/Permissions/PermissionInfo.cs index 4ae42f78184..b243547b460 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionInfo.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionInfo.cs @@ -1,50 +1,64 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Security.Permissions { using System; using System.Data; using System.Xml.Serialization; - + + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common.Utilities; - using DotNetNuke.Entities; - using Newtonsoft.Json; - + using DotNetNuke.Entities; + using Newtonsoft.Json; + /// Project : DotNetNuke /// Namespace: DotNetNuke.Security.Permissions /// Class : PermissionInfo /// PermissionInfo provides the Entity Layer for Permissions. [Serializable] - public class PermissionInfo : BaseEntityInfo + public class PermissionInfo : BaseEntityInfo, IPermissionDefinitionInfo { - /// Gets or sets the Mdoule Definition ID. - /// An Integer. - [XmlIgnore] + /// + [XmlIgnore] [JsonIgnore] public int ModuleDefID { get; set; } - /// Gets or sets the Permission Code. - /// A String. + /// [XmlElement("permissioncode")] public string PermissionCode { get; set; } - /// Gets or sets the Permission ID. - /// An Integer. + /// [XmlElement("permissionid")] public int PermissionID { get; set; } - /// Gets or sets the Permission Key. - /// A String. + /// [XmlElement("permissionkey")] public string PermissionKey { get; set; } - /// Gets or sets the Permission Name. - /// A String. - [XmlIgnore] + /// + [XmlIgnore] [JsonIgnore] public string PermissionName { get; set; } + /// + [XmlIgnore] + [JsonIgnore] + int IPermissionDefinitionInfo.ModuleDefId + { + get => this.ModuleDefID; + set => this.ModuleDefID = value; + } + + /// + [XmlIgnore] + [JsonIgnore] + int IPermissionDefinitionInfo.PermissionId + { + get => this.PermissionID; + set => this.PermissionID = value; + } + /// FillInternal fills a PermissionInfo from a Data Reader. /// The Data Reader to use. protected override void FillInternal(IDataReader dr) diff --git a/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs b/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs index 3e42cd95d07..d0e6a0aa166 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs @@ -7,6 +7,7 @@ namespace DotNetNuke.Security.Permissions using System.Data; using System.Xml.Serialization; + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; @@ -14,7 +15,7 @@ namespace DotNetNuke.Security.Permissions /// Namespace: DotNetNuke.Security.Permissions /// Class : PermissionInfoBase /// PermissionInfoBase provides a base class for PermissionInfo classes. - /// All Permission calsses have a common set of properties + /// All Permission classes have a common set of properties /// - AllowAccess /// - RoleID /// - RoleName @@ -25,7 +26,7 @@ namespace DotNetNuke.Security.Permissions /// and these are implemented in this base class. /// [Serializable] - public abstract class PermissionInfoBase : PermissionInfo + public abstract class PermissionInfoBase : PermissionInfo, IPermissionInfo { private bool allowAccess; private string displayName; @@ -45,8 +46,7 @@ public PermissionInfoBase() this.displayName = Null.NullString; } - /// Gets or sets a value indicating whether gets and sets aflag that indicates whether the user or role has permission. - /// A Boolean. + /// [XmlElement("allowaccess")] public bool AllowAccess { @@ -61,8 +61,7 @@ public bool AllowAccess } } - /// Gets or sets the User's DisplayName. - /// A String. + /// [XmlElement("displayname")] public string DisplayName { @@ -77,8 +76,7 @@ public string DisplayName } } - /// Gets or sets the Role ID. - /// An Integer. + /// [XmlElement("roleid")] public int RoleID { @@ -93,8 +91,7 @@ public int RoleID } } - /// Gets or sets the Role Name. - /// A String. + /// [XmlElement("rolename")] public string RoleName { @@ -109,8 +106,7 @@ public string RoleName } } - /// Gets or sets the User ID. - /// An Integer. + /// [XmlElement("userid")] public int UserID { @@ -125,8 +121,7 @@ public int UserID } } - /// Gets or sets the User Name. - /// A String. + /// [XmlElement("username")] public string Username { @@ -141,6 +136,20 @@ public string Username } } + /// + int IPermissionInfo.RoleId + { + get => this.RoleID; + set => this.RoleID = value; + } + + /// + int IPermissionInfo.UserId + { + get => this.UserID; + set => this.UserID = value; + } + /// FillInternal fills the PermissionInfoBase from a Data Reader. /// The Data Reader to use. protected override void FillInternal(IDataReader dr) diff --git a/DNN Platform/Library/Startup.cs b/DNN Platform/Library/Startup.cs index f3702af3786..f337045dc58 100644 --- a/DNN Platform/Library/Startup.cs +++ b/DNN Platform/Library/Startup.cs @@ -9,6 +9,7 @@ namespace DotNetNuke using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.Logging; using DotNetNuke.Abstractions.Portals; + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Application; using DotNetNuke.Common; using DotNetNuke.Common.Internal; @@ -16,6 +17,7 @@ namespace DotNetNuke using DotNetNuke.Entities.Controllers; using DotNetNuke.Entities.Modules.Settings; using DotNetNuke.Entities.Portals; + using DotNetNuke.Security.Permissions; using DotNetNuke.Services.Log.EventLog; using DotNetNuke.Services.Mail.OAuth; using DotNetNuke.UI.Modules; @@ -50,6 +52,8 @@ public void ConfigureServices(IServiceCollection services) services.AddScoped(); + services.AddScoped(); + services.AddTransient(); services.AddTransient(); SmtpOAuthController.RegisterOAuthProviders(services); diff --git a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs index b6332788819..82bad421cfc 100644 --- a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs +++ b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs @@ -10,6 +10,7 @@ namespace Dnn.Modules.ResourceManager.Components using Dnn.Modules.ResourceManager.Services.Dto; + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Portals; @@ -71,8 +72,8 @@ public static void AddRolePermission(this Permissions dto, PermissionInfoBase pe AllowAccess = permissionInfo.AllowAccess, }); } - } - + } + /// Ensures the dto has the default roles. /// dto to extend. public static void EnsureDefaultRoles(this Permissions dto) @@ -121,18 +122,30 @@ public static void EnsureRole(this Permissions dto, RoleInfo role, bool locked, } } + /// + public static bool IsFullControl(PermissionInfo permissionInfo) + { + return IsFullControl((IPermissionInfo)permissionInfo); + } + /// Check if the permission is for full control. /// The to check. /// A value indicating whether this permission is for full control. - public static bool IsFullControl(PermissionInfo permissionInfo) + public static bool IsFullControl(IPermissionDefinitionInfo permissionInfo) { return (permissionInfo.PermissionKey == "EDIT") && PermissionProvider.Instance().SupportsFullControl(); } + /// + public static bool IsViewPermission(PermissionInfo permissionInfo) + { + return IsViewPermission((IPermissionDefinitionInfo)permissionInfo); + } + /// Checks if the permission is for view. /// The to check. /// A value indicating whether the permission is for view. - public static bool IsViewPermission(PermissionInfo permissionInfo) + public static bool IsViewPermission(IPermissionDefinitionInfo permissionInfo) { return permissionInfo.PermissionKey == "VIEW"; } diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs index 107f825d705..f509d3d652a 100644 --- a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs @@ -3,39 +3,48 @@ // See the LICENSE file in the project root for more information namespace Dnn.Modules.ResourceManager.Services.Dto { + using System; using System.Linq; + using System.Web; using Dnn.Modules.ResourceManager.Components; + using DotNetNuke.Abstractions.Security.Permissions; + using DotNetNuke.Common; + using DotNetNuke.Common.Extensions; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Portals; + using DotNetNuke.Internal.SourceGenerators; using DotNetNuke.Security.Permissions; + using Microsoft.Extensions.DependencyInjection; + /// Provides information about folder permissions. public class FolderPermissions : Permissions - { + { /// Initializes a new instance of the class. public FolderPermissions() - : base(false) { - } - + } + /// Initializes a new instance of the class. /// A vlaue indicating whether the permissions definitions need to be loaded. - public FolderPermissions(bool needDefinitions) - : base(needDefinitions) + /// The permission service. + public FolderPermissions(bool needDefinitions, IPermissionService permissionService) + : base(needDefinitions, permissionService) { foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) { this.EnsureRole(role, true, true); } - } - + } + /// Initializes a new instance of the class. /// A value indicating whether the permission definitions need to be loaded. /// A colleciton of folder permissions. - public FolderPermissions(bool needDefinitions, FolderPermissionCollection permissions) - : base(needDefinitions) + /// The permission service. + public FolderPermissions(bool needDefinitions, FolderPermissionCollection permissions, IPermissionService permissionService) + : base(needDefinitions, permissionService) { foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) { @@ -60,16 +69,16 @@ public FolderPermissions(bool needDefinitions, FolderPermissionCollection permis .ToList(); this.UserPermissions = this.UserPermissions.OrderBy(p => p.DisplayName).ToList(); } - } - + } + /// - protected override void LoadPermissionDefinitions() + protected override void LoadPermissionDefinitions(IPermissionService permissionService) { - foreach (PermissionInfo permission in PermissionController.GetPermissionsByFolder()) + foreach (var permission in permissionService.GetDefinitionsByFolder()) { this.PermissionDefinitions.Add(new Permission { - PermissionId = permission.PermissionID, + PermissionId = permission.PermissionId, PermissionName = permission.PermissionName, FullControl = PermissionHelper.IsFullControl(permission), View = PermissionHelper.IsViewPermission(permission), diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs index 68adc6f5828..713f663283c 100644 --- a/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs @@ -3,32 +3,36 @@ // See the LICENSE file in the project root for more information namespace Dnn.Modules.ResourceManager.Services.Dto { + using System; using System.Collections.Generic; using System.Runtime.Serialization; using Dnn.Modules.ResourceManager.Components; + using DotNetNuke.Abstractions.Security.Permissions; + using DotNetNuke.Security.Permissions; + /// Represents a permissions set. [DataContract] public abstract class Permissions - { + { /// Initializes a new instance of the class. protected Permissions() - : this(false) - { - } - - /// Initializes a new instance of the class. - /// A value indicating whether the permissions need to be loaded. - protected Permissions(bool needDefinitions) { this.RolePermissions = new List(); this.UserPermissions = new List(); + } + /// Initializes a new instance of the class. + /// A value indicating whether the permissions need to be loaded. + /// The permission service. + protected Permissions(bool needDefinitions, IPermissionService permissionService) + : this() + { if (needDefinitions) { this.PermissionDefinitions = new List(); - this.LoadPermissionDefinitions(); + this.LoadPermissionDefinitions(permissionService); this.EnsureDefaultRoles(); } } @@ -46,6 +50,7 @@ protected Permissions(bool needDefinitions) public IList UserPermissions { get; set; } /// Loads the permissions definitions. - protected abstract void LoadPermissionDefinitions(); + /// The permission service. + protected abstract void LoadPermissionDefinitions(IPermissionService permissionService); } } diff --git a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs index 45012ac34a8..6326dcc9a81 100644 --- a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs +++ b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs @@ -20,6 +20,7 @@ namespace Dnn.Modules.ResourceManager.Services using Dnn.Modules.ResourceManager.Services.Attributes; using Dnn.Modules.ResourceManager.Services.Dto; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Icons; @@ -45,14 +46,20 @@ public class ItemsController : DnnApiController private readonly IModuleControlPipeline modulePipeline; private readonly IApplicationStatusInfo applicationStatusInfo; private readonly Hashtable mappedPathsSupported = new Hashtable(); + private readonly IPermissionService permissionService; /// Initializes a new instance of the class. /// An instance of an used to hook into the EditUrl of the webforms folders provider settings UI. /// The application status info. - public ItemsController(IModuleControlPipeline modulePipeline, IApplicationStatusInfo applicationStatusInfo) + /// The permission service. + public ItemsController( + IModuleControlPipeline modulePipeline, + IApplicationStatusInfo applicationStatusInfo, + IPermissionService permissionService) { this.modulePipeline = modulePipeline; this.applicationStatusInfo = applicationStatusInfo; + this.permissionService = permissionService; } /// Gets the content for a specific folder. @@ -442,7 +449,7 @@ public HttpResponseMessage GetFolderDetails(int folderId) lastModifiedBy = lastModifiedBy != null ? lastModifiedBy.Username : string.Empty, type = FolderMappingController.Instance.GetFolderMapping(folder.FolderMappingID).MappingName, isVersioned = folder.IsVersioned, - permissions = new FolderPermissions(true, folder.FolderPermissions), + permissions = new FolderPermissions(true, folder.FolderPermissions, this.permissionService), }); } From e5038a0d466555f0221381cc7d0eb6ebb722608d Mon Sep 17 00:00:00 2001 From: Gerard Smit Date: Tue, 17 Oct 2023 19:46:55 +0200 Subject: [PATCH 2/5] Refactored Dnn.Modules.ResourceManager to used abstractions Dnn.Modules.ResourceManager has TreatWarningsAsErrors enabled --- .../Permissions/FolderPermissionCollection.cs | 50 ++++--- .../Components/ItemsManager.cs | 4 +- .../Components/PermissionHelper.cs | 140 +++++++++++------- .../Dnn.Modules.ResourceManager.csproj | 1 - .../Services/Dto/FolderDetailsRequest.cs | 4 +- .../Services/Dto/FolderPermissions.cs | 89 ----------- .../Services/Dto/Permissions.cs | 23 +-- .../Services/ItemsController.cs | 2 +- 8 files changed, 123 insertions(+), 190 deletions(-) delete mode 100644 DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs diff --git a/DNN Platform/Library/Security/Permissions/FolderPermissionCollection.cs b/DNN Platform/Library/Security/Permissions/FolderPermissionCollection.cs index e963be2f1eb..6eeada15f7a 100644 --- a/DNN Platform/Library/Security/Permissions/FolderPermissionCollection.cs +++ b/DNN Platform/Library/Security/Permissions/FolderPermissionCollection.cs @@ -1,39 +1,39 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Security.Permissions { using System; using System.Collections; using System.Collections.Generic; - - using DotNetNuke.Common.Utilities; - + + using DotNetNuke.Common.Utilities; + [Serializable] public class FolderPermissionCollection : CollectionBase - { - /// Initializes a new instance of the class. + { + /// Initializes a new instance of the class. public FolderPermissionCollection() { - } - - /// Initializes a new instance of the class. - /// + } + + /// Initializes a new instance of the class. + /// public FolderPermissionCollection(ArrayList folderPermissions) { this.AddRange(folderPermissions); - } - - /// Initializes a new instance of the class. - /// + } + + /// Initializes a new instance of the class. + /// public FolderPermissionCollection(FolderPermissionCollection folderPermissions) { this.AddRange(folderPermissions); - } - - /// Initializes a new instance of the class. - /// - /// + } + + /// Initializes a new instance of the class. + /// + /// public FolderPermissionCollection(ArrayList folderPermissions, string folderPath) { foreach (FolderPermissionInfo permission in folderPermissions) @@ -91,6 +91,14 @@ public int Add(FolderPermissionInfo value, bool checkForDuplicates) return id; } + public void AddRange(IEnumerable folderPermissions) + { + foreach (var permission in folderPermissions) + { + this.List.Add(permission); + } + } + public void AddRange(ArrayList folderPermissions) { foreach (FolderPermissionInfo permission in folderPermissions) diff --git a/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs b/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs index d5a94d25e30..582b847a8a8 100644 --- a/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs +++ b/DNN Platform/Modules/ResourceManager/Components/ItemsManager.cs @@ -134,8 +134,8 @@ public void SaveFolderDetails(IFolderInfo folder, FolderDetailsRequest folderDet } folder.FolderPermissions.Clear(); - folder.FolderPermissions.AddRange(folderDetails.Permissions.RolePermissions.ToPermissionInfos(folderDetails.FolderId)); - folder.FolderPermissions.AddRange(folderDetails.Permissions.UserPermissions.ToPermissionInfos(folderDetails.FolderId)); + folder.FolderPermissions.AddRange(folderDetails.Permissions.RolePermissions.AsFolderPermissions(folderDetails.FolderId)); + folder.FolderPermissions.AddRange(folderDetails.Permissions.UserPermissions.AsFolderPermissions(folderDetails.FolderId)); FolderManager.Instance.UpdateFolder(folder); } diff --git a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs index 82bad421cfc..1071582062d 100644 --- a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs +++ b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs @@ -23,24 +23,24 @@ public static class PermissionHelper /// Adds user permissions to the dto. /// data transfer object to extend. /// Permission to add. - public static void AddUserPermission(this Permissions dto, PermissionInfoBase permissionInfo) + public static void AddUserPermission(this Permissions dto, IPermissionInfo permissionInfo) { - var userPermission = dto.UserPermissions.FirstOrDefault(p => p.UserId == permissionInfo.UserID); + var userPermission = dto.UserPermissions.FirstOrDefault(p => p.UserId == permissionInfo.UserId); if (userPermission == null) { userPermission = new UserPermission { - UserId = permissionInfo.UserID, + UserId = permissionInfo.UserId, DisplayName = permissionInfo.DisplayName, }; dto.UserPermissions.Add(userPermission); } - if (userPermission.Permissions.All(p => p.PermissionId != permissionInfo.PermissionID)) + if (userPermission.Permissions.All(p => p.PermissionId != permissionInfo.PermissionId)) { userPermission.Permissions.Add(new Permission { - PermissionId = permissionInfo.PermissionID, + PermissionId = permissionInfo.PermissionId, PermissionName = permissionInfo.PermissionName, AllowAccess = permissionInfo.AllowAccess, }); @@ -50,24 +50,24 @@ public static void AddUserPermission(this Permissions dto, PermissionInfoBase pe /// Adds role permissions to the dto. /// dto to extend. /// Permission to add. - public static void AddRolePermission(this Permissions dto, PermissionInfoBase permissionInfo) + public static void AddRolePermission(this Permissions dto, IPermissionInfo permissionInfo) { - var rolePermission = dto.RolePermissions.FirstOrDefault(p => p.RoleId == permissionInfo.RoleID); + var rolePermission = dto.RolePermissions.FirstOrDefault(p => p.RoleId == permissionInfo.RoleId); if (rolePermission == null) { rolePermission = new RolePermission { - RoleId = permissionInfo.RoleID, + RoleId = permissionInfo.RoleId, RoleName = permissionInfo.RoleName, }; dto.RolePermissions.Add(rolePermission); } - if (rolePermission.Permissions.All(p => p.PermissionId != permissionInfo.PermissionID)) + if (rolePermission.Permissions.All(p => p.PermissionId != permissionInfo.PermissionId)) { rolePermission.Permissions.Add(new Permission { - PermissionId = permissionInfo.PermissionID, + PermissionId = permissionInfo.PermissionId, PermissionName = permissionInfo.PermissionName, AllowAccess = permissionInfo.AllowAccess, }); @@ -122,12 +122,6 @@ public static void EnsureRole(this Permissions dto, RoleInfo role, bool locked, } } - /// - public static bool IsFullControl(PermissionInfo permissionInfo) - { - return IsFullControl((IPermissionInfo)permissionInfo); - } - /// Check if the permission is for full control. /// The to check. /// A value indicating whether this permission is for full control. @@ -136,12 +130,6 @@ public static bool IsFullControl(IPermissionDefinitionInfo permissionInfo) return (permissionInfo.PermissionKey == "EDIT") && PermissionProvider.Instance().SupportsFullControl(); } - /// - public static bool IsViewPermission(PermissionInfo permissionInfo) - { - return IsViewPermission((IPermissionDefinitionInfo)permissionInfo); - } - /// Checks if the permission is for view. /// The to check. /// A value indicating whether the permission is for view. @@ -157,7 +145,7 @@ public static object GetRoles(int portalId) { var data = new { Groups = new List(), Roles = new List() }; - // retreive role groups info + // Retrieves role groups info data.Groups.Add(new { GroupId = -2, Name = "AllRoles" }); data.Groups.Add(new { GroupId = -1, Name = "GlobalRoles", Selected = true }); @@ -166,7 +154,7 @@ public static object GetRoles(int portalId) data.Groups.Add(new { GroupId = group.RoleGroupID, Name = group.RoleGroupName }); } - // retreive roles info + // Retrieves roles info data.Roles.Add(new { RoleID = int.Parse(Globals.glbRoleUnauthUser), GroupId = -1, RoleName = Globals.glbRoleUnauthUserName }); data.Roles.Add(new { RoleID = int.Parse(Globals.glbRoleAllUsers), GroupId = -1, RoleName = Globals.glbRoleAllUsersName }); foreach (RoleInfo role in RoleController.Instance.GetRoles(portalId).OrderBy(r => r.RoleName)) @@ -181,50 +169,94 @@ public static object GetRoles(int portalId) /// The list of to convert. /// The folder id. /// An ArrayList of . - public static ArrayList ToPermissionInfos(this IList permissions, int folderId) + public static IEnumerable AsFolderPermissions(this IEnumerable permissions, int folderId) { - var newPermissions = new ArrayList(); - foreach (var permission in permissions) - { - foreach (var p in permission.Permissions) + return permissions.SelectMany( + p => p.Permissions, + (p, permission) => new FolderPermissionInfo { - newPermissions.Add(new FolderPermissionInfo() - { - AllowAccess = p.AllowAccess, - FolderID = folderId, - PermissionID = p.PermissionId, - RoleID = permission.RoleId, - UserID = Null.NullInteger, - }); - } - } - - return newPermissions; + AllowAccess = permission.AllowAccess, + FolderID = folderId, + PermissionID = permission.PermissionId, + RoleID = p.RoleId, + UserID = Null.NullInteger, + }); } /// Converts a list of into a collection of . /// The list of to extend. /// The id of the folder. /// An ArrayList of . - public static ArrayList ToPermissionInfos(this IList permissions, int folderId) + public static IEnumerable AsFolderPermissions(this IEnumerable permissions, int folderId) + { + return permissions.SelectMany( + p => p.Permissions, + (p, permission) => new FolderPermissionInfo + { + AllowAccess = permission.AllowAccess, + FolderID = folderId, + PermissionID = permission.PermissionId, + RoleID = int.Parse(Globals.glbRoleNothing), + UserID = p.UserId, + }); + } + + /// Get the permissions for a folder. + /// The permission service. + /// The collection of . + /// A dto. + public static Permissions GetFolderPermissions( + this IPermissionService permissionService, + FolderPermissionCollection collection) { - var newPermissions = new ArrayList(); - foreach (var permission in permissions) + var permissions = new Permissions(); + + // Load the definitions + foreach (var definition in permissionService.GetDefinitionsByFolder()) { - foreach (var p in permission.Permissions) + var definitionDto = new Permission { - newPermissions.Add(new FolderPermissionInfo() - { - AllowAccess = p.AllowAccess, - FolderID = folderId, - PermissionID = p.PermissionId, - RoleID = int.Parse(Globals.glbRoleNothing), - UserID = permission.UserId, - }); + PermissionId = definition.PermissionId, + PermissionName = definition.PermissionName, + FullControl = IsFullControl(definition), + View = IsViewPermission(definition), + }; + + permissions.PermissionDefinitions.Add(definitionDto); + } + + // Load the permissions + permissions.EnsureDefaultRoles(); + + foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) + { + permissions.EnsureRole(role, true, true); + } + + foreach (FolderPermissionInfo permission in collection) + { + if (permission.UserID != Null.NullInteger) + { + permissions.AddUserPermission(permission); + } + else + { + permissions.AddRolePermission(permission); } } - return newPermissions; + // Sort the permissions + permissions.RolePermissions = permissions.RolePermissions + .OrderByDescending(p => p.Locked) + .ThenByDescending(p => p.IsDefault) + .ThenBy(p => p.RoleName) + .ToList(); + + permissions.UserPermissions = permissions.UserPermissions + .OrderBy(p => p.DisplayName) + .ToList(); + + return permissions; } } } diff --git a/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj b/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj index fef5d66c8ff..02ef17dd702 100644 --- a/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj +++ b/DNN Platform/Modules/ResourceManager/Dnn.Modules.ResourceManager.csproj @@ -128,7 +128,6 @@ - diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs index 4787a5fdd46..c27c719cd8b 100644 --- a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderDetailsRequest.cs @@ -16,8 +16,8 @@ public class FolderDetailsRequest [DataMember(Name = "folderName")] public string FolderName { get; set; } - /// Gets or sets the . + /// Gets or sets the . [DataMember(Name = "permissions")] - public FolderPermissions Permissions { get; set; } + public Permissions Permissions { get; set; } } } diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs deleted file mode 100644 index f509d3d652a..00000000000 --- a/DNN Platform/Modules/ResourceManager/Services/Dto/FolderPermissions.cs +++ /dev/null @@ -1,89 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information -namespace Dnn.Modules.ResourceManager.Services.Dto -{ - using System; - using System.Linq; - using System.Web; - - using Dnn.Modules.ResourceManager.Components; - - using DotNetNuke.Abstractions.Security.Permissions; - using DotNetNuke.Common; - using DotNetNuke.Common.Extensions; - using DotNetNuke.Common.Utilities; - using DotNetNuke.Entities.Portals; - using DotNetNuke.Internal.SourceGenerators; - using DotNetNuke.Security.Permissions; - - using Microsoft.Extensions.DependencyInjection; - - /// Provides information about folder permissions. - public class FolderPermissions : Permissions - { - /// Initializes a new instance of the class. - public FolderPermissions() - { - } - - /// Initializes a new instance of the class. - /// A vlaue indicating whether the permissions definitions need to be loaded. - /// The permission service. - public FolderPermissions(bool needDefinitions, IPermissionService permissionService) - : base(needDefinitions, permissionService) - { - foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) - { - this.EnsureRole(role, true, true); - } - } - - /// Initializes a new instance of the class. - /// A value indicating whether the permission definitions need to be loaded. - /// A colleciton of folder permissions. - /// The permission service. - public FolderPermissions(bool needDefinitions, FolderPermissionCollection permissions, IPermissionService permissionService) - : base(needDefinitions, permissionService) - { - foreach (var role in PermissionProvider.Instance().ImplicitRolesForFolders(PortalSettings.Current.PortalId)) - { - this.EnsureRole(role, true, true); - } - - foreach (FolderPermissionInfo permission in permissions) - { - if (permission.UserID != Null.NullInteger) - { - this.AddUserPermission(permission); - } - else - { - this.AddRolePermission(permission); - } - - this.RolePermissions = - this.RolePermissions.OrderByDescending(p => p.Locked) - .ThenByDescending(p => p.IsDefault) - .ThenBy(p => p.RoleName) - .ToList(); - this.UserPermissions = this.UserPermissions.OrderBy(p => p.DisplayName).ToList(); - } - } - - /// - protected override void LoadPermissionDefinitions(IPermissionService permissionService) - { - foreach (var permission in permissionService.GetDefinitionsByFolder()) - { - this.PermissionDefinitions.Add(new Permission - { - PermissionId = permission.PermissionId, - PermissionName = permission.PermissionName, - FullControl = PermissionHelper.IsFullControl(permission), - View = PermissionHelper.IsViewPermission(permission), - }); - } - } - } -} diff --git a/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs b/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs index 713f663283c..5e6498e4a25 100644 --- a/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs +++ b/DNN Platform/Modules/ResourceManager/Services/Dto/Permissions.cs @@ -14,27 +14,14 @@ namespace Dnn.Modules.ResourceManager.Services.Dto /// Represents a permissions set. [DataContract] - public abstract class Permissions + public class Permissions { /// Initializes a new instance of the class. - protected Permissions() + public Permissions() { this.RolePermissions = new List(); this.UserPermissions = new List(); - } - - /// Initializes a new instance of the class. - /// A value indicating whether the permissions need to be loaded. - /// The permission service. - protected Permissions(bool needDefinitions, IPermissionService permissionService) - : this() - { - if (needDefinitions) - { - this.PermissionDefinitions = new List(); - this.LoadPermissionDefinitions(permissionService); - this.EnsureDefaultRoles(); - } + this.PermissionDefinitions = new List(); } /// Gets or sets the list of permissions definitions. @@ -48,9 +35,5 @@ protected Permissions(bool needDefinitions, IPermissionService permissionService /// Gets or sets a list of user based permissions. [DataMember(Name = "userPermissions")] public IList UserPermissions { get; set; } - - /// Loads the permissions definitions. - /// The permission service. - protected abstract void LoadPermissionDefinitions(IPermissionService permissionService); } } diff --git a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs index 6326dcc9a81..a33ebb54f6d 100644 --- a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs +++ b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs @@ -449,7 +449,7 @@ public HttpResponseMessage GetFolderDetails(int folderId) lastModifiedBy = lastModifiedBy != null ? lastModifiedBy.Username : string.Empty, type = FolderMappingController.Instance.GetFolderMapping(folder.FolderMappingID).MappingName, isVersioned = folder.IsVersioned, - permissions = new FolderPermissions(true, folder.FolderPermissions, this.permissionService), + permissions = this.permissionService.GetFolderPermissions(folder.FolderPermissions), }); } From dfed0459b902090ab6356a9d72f9fda874ace11f Mon Sep 17 00:00:00 2001 From: Gerard Smit Date: Tue, 17 Oct 2023 23:24:11 +0200 Subject: [PATCH 3/5] Renamed IPermissionService to IPermissionDefinitionService --- ...ice.cs => IPermissionDefinitionService.cs} | 2 +- .../Permissions/PermissionController.cs | 62 +++++++++---------- DNN Platform/Library/Startup.cs | 2 +- .../Components/PermissionHelper.cs | 6 +- .../Services/ItemsController.cs | 10 +-- 5 files changed, 41 insertions(+), 41 deletions(-) rename DNN Platform/DotNetNuke.Abstractions/Security/Permissions/{IPermissionService.cs => IPermissionDefinitionService.cs} (98%) diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionService.cs similarity index 98% rename from DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs rename to DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionService.cs index ec2a40eaa47..a12906b8c96 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionService.cs +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionService.cs @@ -7,7 +7,7 @@ namespace DotNetNuke.Abstractions.Security.Permissions; using System.Collections.Generic; /// Handles the Business Control Layer for Permissions. -public interface IPermissionService +public interface IPermissionDefinitionService { /// Gets the permissions. /// The permissions. diff --git a/DNN Platform/Library/Security/Permissions/PermissionController.cs b/DNN Platform/Library/Security/Permissions/PermissionController.cs index f9e47b50b56..b4245ba7495 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionController.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionController.cs @@ -20,7 +20,7 @@ namespace DotNetNuke.Security.Permissions using DotNetNuke.Security.Roles; using DotNetNuke.Services.Log.EventLog; - public partial class PermissionController : IPermissionService + public partial class PermissionController : IPermissionDefinitionService { private static readonly DataProvider Provider = DataProvider.Instance(); @@ -69,34 +69,34 @@ public static string BuildPermissions(IList permissions, string permissionKey) return permissionsString; } - /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByFolder)} instead.")] + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByFolder)} instead.")] public static partial ArrayList GetPermissionsByFolder() { return new ArrayList(GetPermissionsByFolderEnumerable().ToArray()); } - /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByPortalDesktopModule)} instead.")] + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByPortalDesktopModule)} instead.")] public static partial ArrayList GetPermissionsByPortalDesktopModule() { return new ArrayList(GetPermissionsByPortalDesktopModuleEnumerable().ToArray()); } - /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByTab)} instead.")] + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByTab)} instead.")] public static partial ArrayList GetPermissionsByTab() { return new ArrayList(GetPermissionsByTabEnumerable().ToArray()); } - /// + /// public int AddPermission(PermissionInfo permission) { return this.AddPermission((IPermissionDefinitionInfo)permission); } - /// + /// public int AddPermission(IPermissionDefinitionInfo permission) { EventLogController.Instance.AddLog(permission, PortalController.Instance.GetCurrentPortalSettings(), UserController.Instance.GetCurrentUserInfo().UserID, string.Empty, EventLogController.EventLogType.PERMISSION_CREATED); @@ -111,7 +111,7 @@ public int AddPermission(IPermissionDefinitionInfo permission) return permissionId; } - /// + /// public void DeletePermission(int permissionID) { EventLogController.Instance.AddLog( @@ -124,40 +124,40 @@ public void DeletePermission(int permissionID) this.ClearCache(); } - /// + /// public PermissionInfo GetPermission(int permissionID) { return GetPermissions().SingleOrDefault(p => p.PermissionID == permissionID); } - /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByCodeAndKey)} instead.")] + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByCodeAndKey)} instead.")] public partial ArrayList GetPermissionByCodeAndKey(string permissionCode, string permissionKey) { return new ArrayList(GetPermissionByCodeAndKeyEnumerable(permissionCode, permissionKey).ToArray()); } - /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByModuleDefId)} instead.")] + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByModuleDefId)} instead.")] public partial ArrayList GetPermissionsByModuleDefID(int moduleDefID) { return new ArrayList(GetPermissionsByModuleDefIdEnumerable(moduleDefID).ToArray()); } - /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionService)}.{nameof(IPermissionService.GetDefinitionsByModule)} instead.")] + /// + [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByModule)} instead.")] public partial ArrayList GetPermissionsByModule(int moduleId, int tabId) { return new ArrayList(GetPermissionsByModuleEnumerable(moduleId, tabId).ToArray()); } - /// + /// public void UpdatePermission(PermissionInfo permission) { this.UpdatePermission((IPermissionDefinitionInfo)permission); } - /// + /// public void UpdatePermission(IPermissionDefinitionInfo permission) { EventLogController.Instance.AddLog(permission, PortalController.Instance.GetCurrentPortalSettings(), UserController.Instance.GetCurrentUserInfo().UserID, string.Empty, EventLogController.EventLogType.PERMISSION_UPDATED); @@ -241,40 +241,40 @@ public partial ArrayList GetPermissionsByModuleID(int moduleId) } /// - IEnumerable IPermissionService.GetDefinitions() => GetPermissions(); + IEnumerable IPermissionDefinitionService.GetDefinitions() => GetPermissions(); /// - IEnumerable IPermissionService.GetDefinitionsByFolder() => GetPermissionsByFolderEnumerable(); + IEnumerable IPermissionDefinitionService.GetDefinitionsByFolder() => GetPermissionsByFolderEnumerable(); /// - IEnumerable IPermissionService.GetDefinitionsByPortalDesktopModule() => GetPermissionsByPortalDesktopModuleEnumerable(); + IEnumerable IPermissionDefinitionService.GetDefinitionsByPortalDesktopModule() => GetPermissionsByPortalDesktopModuleEnumerable(); /// - IEnumerable IPermissionService.GetDefinitionsByTab() => GetPermissionsByTabEnumerable(); + IEnumerable IPermissionDefinitionService.GetDefinitionsByTab() => GetPermissionsByTabEnumerable(); /// - IEnumerable IPermissionService.GetDefinitionsByCodeAndKey(string permissionCode, string permissionKey) => GetPermissionByCodeAndKeyEnumerable(permissionCode, permissionKey); + IEnumerable IPermissionDefinitionService.GetDefinitionsByCodeAndKey(string permissionCode, string permissionKey) => GetPermissionByCodeAndKeyEnumerable(permissionCode, permissionKey); /// - IEnumerable IPermissionService.GetDefinitionsByModuleDefId(int moduleDefId) => GetPermissionsByModuleDefIdEnumerable(moduleDefId); + IEnumerable IPermissionDefinitionService.GetDefinitionsByModuleDefId(int moduleDefId) => GetPermissionsByModuleDefIdEnumerable(moduleDefId); /// - IEnumerable IPermissionService.GetDefinitionsByModule(int moduleId, int tabId) => GetPermissionsByModuleEnumerable(moduleId, tabId); + IEnumerable IPermissionDefinitionService.GetDefinitionsByModule(int moduleId, int tabId) => GetPermissionsByModuleEnumerable(moduleId, tabId); /// - int IPermissionService.AddDefinition(IPermissionDefinitionInfo permission) => this.AddPermission(permission); + int IPermissionDefinitionService.AddDefinition(IPermissionDefinitionInfo permission) => this.AddPermission(permission); /// - void IPermissionService.DeleteDefinition(IPermissionDefinitionInfo permission) => this.DeletePermission(permission.PermissionId); + void IPermissionDefinitionService.DeleteDefinition(IPermissionDefinitionInfo permission) => this.DeletePermission(permission.PermissionId); /// - IPermissionDefinitionInfo IPermissionService.GetDefinition(int permissionDefinitionId) => this.GetPermission(permissionDefinitionId); + IPermissionDefinitionInfo IPermissionDefinitionService.GetDefinition(int permissionDefinitionId) => this.GetPermission(permissionDefinitionId); /// - void IPermissionService.UpdateDefinition(IPermissionDefinitionInfo permission) => this.UpdatePermission(permission); + void IPermissionDefinitionService.UpdateDefinition(IPermissionDefinitionInfo permission) => this.UpdatePermission(permission); /// - void IPermissionService.ClearCache() => this.ClearCache(); + void IPermissionDefinitionService.ClearCache() => this.ClearCache(); private static IEnumerable GetPermissions() { diff --git a/DNN Platform/Library/Startup.cs b/DNN Platform/Library/Startup.cs index f337045dc58..b94b0182800 100644 --- a/DNN Platform/Library/Startup.cs +++ b/DNN Platform/Library/Startup.cs @@ -52,7 +52,7 @@ public void ConfigureServices(IServiceCollection services) services.AddScoped(); - services.AddScoped(); + services.AddScoped(); services.AddTransient(); services.AddTransient(); diff --git a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs index 1071582062d..e2936d161a3 100644 --- a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs +++ b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs @@ -202,17 +202,17 @@ public static IEnumerable AsFolderPermissions(this IEnumer } /// Get the permissions for a folder. - /// The permission service. + /// The permission service. /// The collection of . /// A dto. public static Permissions GetFolderPermissions( - this IPermissionService permissionService, + this IPermissionDefinitionService permissionDefinitionService, FolderPermissionCollection collection) { var permissions = new Permissions(); // Load the definitions - foreach (var definition in permissionService.GetDefinitionsByFolder()) + foreach (var definition in permissionDefinitionService.GetDefinitionsByFolder()) { var definitionDto = new Permission { diff --git a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs index a33ebb54f6d..7a3fc5c5104 100644 --- a/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs +++ b/DNN Platform/Modules/ResourceManager/Services/ItemsController.cs @@ -46,20 +46,20 @@ public class ItemsController : DnnApiController private readonly IModuleControlPipeline modulePipeline; private readonly IApplicationStatusInfo applicationStatusInfo; private readonly Hashtable mappedPathsSupported = new Hashtable(); - private readonly IPermissionService permissionService; + private readonly IPermissionDefinitionService permissionDefinitionService; /// Initializes a new instance of the class. /// An instance of an used to hook into the EditUrl of the webforms folders provider settings UI. /// The application status info. - /// The permission service. + /// The permission service. public ItemsController( IModuleControlPipeline modulePipeline, IApplicationStatusInfo applicationStatusInfo, - IPermissionService permissionService) + IPermissionDefinitionService permissionDefinitionService) { this.modulePipeline = modulePipeline; this.applicationStatusInfo = applicationStatusInfo; - this.permissionService = permissionService; + this.permissionDefinitionService = permissionDefinitionService; } /// Gets the content for a specific folder. @@ -449,7 +449,7 @@ public HttpResponseMessage GetFolderDetails(int folderId) lastModifiedBy = lastModifiedBy != null ? lastModifiedBy.Username : string.Empty, type = FolderMappingController.Instance.GetFolderMapping(folder.FolderMappingID).MappingName, isVersioned = folder.IsVersioned, - permissions = this.permissionService.GetFolderPermissions(folder.FolderPermissions), + permissions = this.permissionDefinitionService.GetFolderPermissions(folder.FolderPermissions), }); } From 30627c8fd8aa520592449fbec6bde908e2e09a0f Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 24 Oct 2023 15:04:10 -0500 Subject: [PATCH 4/5] Deprecate permission properties in 9.13.1 --- .../Permissions/PermissionController.cs | 12 ++--- .../Security/Permissions/PermissionInfo.cs | 38 ++++++++------- .../Permissions/PermissionInfoBase.cs | 47 ++++++++++--------- 3 files changed, 52 insertions(+), 45 deletions(-) diff --git a/DNN Platform/Library/Security/Permissions/PermissionController.cs b/DNN Platform/Library/Security/Permissions/PermissionController.cs index b4245ba7495..d46b7306fce 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionController.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionController.cs @@ -70,21 +70,21 @@ public static string BuildPermissions(IList permissions, string permissionKey) } /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByFolder)} instead.")] + [DnnDeprecated(9, 13, 1, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByFolder)} instead.")] public static partial ArrayList GetPermissionsByFolder() { return new ArrayList(GetPermissionsByFolderEnumerable().ToArray()); } /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByPortalDesktopModule)} instead.")] + [DnnDeprecated(9, 13, 1, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByPortalDesktopModule)} instead.")] public static partial ArrayList GetPermissionsByPortalDesktopModule() { return new ArrayList(GetPermissionsByPortalDesktopModuleEnumerable().ToArray()); } /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByTab)} instead.")] + [DnnDeprecated(9, 13, 1, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByTab)} instead.")] public static partial ArrayList GetPermissionsByTab() { return new ArrayList(GetPermissionsByTabEnumerable().ToArray()); @@ -131,21 +131,21 @@ public PermissionInfo GetPermission(int permissionID) } /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByCodeAndKey)} instead.")] + [DnnDeprecated(9, 13, 1, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByCodeAndKey)} instead.")] public partial ArrayList GetPermissionByCodeAndKey(string permissionCode, string permissionKey) { return new ArrayList(GetPermissionByCodeAndKeyEnumerable(permissionCode, permissionKey).ToArray()); } /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByModuleDefId)} instead.")] + [DnnDeprecated(9, 13, 1, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByModuleDefId)} instead.")] public partial ArrayList GetPermissionsByModuleDefID(int moduleDefID) { return new ArrayList(GetPermissionsByModuleDefIdEnumerable(moduleDefID).ToArray()); } /// - [DnnDeprecated(10, 0, 0, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByModule)} instead.")] + [DnnDeprecated(9, 13, 1, $"Use {nameof(IPermissionDefinitionService)}.{nameof(IPermissionDefinitionService.GetDefinitionsByModule)} instead.")] public partial ArrayList GetPermissionsByModule(int moduleId, int tabId) { return new ArrayList(GetPermissionsByModuleEnumerable(moduleId, tabId).ToArray()); diff --git a/DNN Platform/Library/Security/Permissions/PermissionInfo.cs b/DNN Platform/Library/Security/Permissions/PermissionInfo.cs index b243547b460..6a829607cb9 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionInfo.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionInfo.cs @@ -22,7 +22,12 @@ public class PermissionInfo : BaseEntityInfo, IPermissionDefinitionInfo /// [XmlIgnore] [JsonIgnore] - public int ModuleDefID { get; set; } + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IPermissionDefinitionInfo)}.{nameof(IPermissionDefinitionInfo.ModuleDefId)} instead. Scheduled for removal in v11.0.0.")] + public int ModuleDefID + { + get => ((IPermissionDefinitionInfo)this).ModuleDefId; + set => ((IPermissionDefinitionInfo)this).ModuleDefId = value; + } /// [XmlElement("permissioncode")] @@ -30,7 +35,12 @@ public class PermissionInfo : BaseEntityInfo, IPermissionDefinitionInfo /// [XmlElement("permissionid")] - public int PermissionID { get; set; } + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IPermissionDefinitionInfo)}.{nameof(IPermissionDefinitionInfo.PermissionId)} instead. Scheduled for removal in v11.0.0.")] + public int PermissionID + { + get => ((IPermissionDefinitionInfo)this).PermissionId; + set => ((IPermissionDefinitionInfo)this).PermissionId = value; + } /// [XmlElement("permissionkey")] @@ -44,31 +54,25 @@ public class PermissionInfo : BaseEntityInfo, IPermissionDefinitionInfo /// [XmlIgnore] [JsonIgnore] - int IPermissionDefinitionInfo.ModuleDefId - { - get => this.ModuleDefID; - set => this.ModuleDefID = value; - } + int IPermissionDefinitionInfo.ModuleDefId { get; set; } /// [XmlIgnore] [JsonIgnore] - int IPermissionDefinitionInfo.PermissionId - { - get => this.PermissionID; - set => this.PermissionID = value; - } + int IPermissionDefinitionInfo.PermissionId { get; set; } /// FillInternal fills a PermissionInfo from a Data Reader. /// The Data Reader to use. protected override void FillInternal(IDataReader dr) { base.FillInternal(dr); - this.PermissionID = Null.SetNullInteger(dr["PermissionID"]); - this.ModuleDefID = Null.SetNullInteger(dr["ModuleDefID"]); - this.PermissionCode = Null.SetNullString(dr["PermissionCode"]); - this.PermissionKey = Null.SetNullString(dr["PermissionKey"]); - this.PermissionName = Null.SetNullString(dr["PermissionName"]); + + var @this = (IPermissionDefinitionInfo)this; + @this.PermissionId = Null.SetNullInteger(dr["PermissionID"]); + @this.ModuleDefId = Null.SetNullInteger(dr["ModuleDefID"]); + @this.PermissionCode = Null.SetNullString(dr["PermissionCode"]); + @this.PermissionKey = Null.SetNullString(dr["PermissionKey"]); + @this.PermissionName = Null.SetNullString(dr["PermissionName"]); } } } diff --git a/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs b/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs index d0e6a0aa166..c4815d27e98 100644 --- a/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs +++ b/DNN Platform/Library/Security/Permissions/PermissionInfoBase.cs @@ -30,18 +30,18 @@ public abstract class PermissionInfoBase : PermissionInfo, IPermissionInfo { private bool allowAccess; private string displayName; - private int roleID; + private int roleId; private string roleName; - private int userID; + private int userId; private string username; /// Initializes a new instance of the class. public PermissionInfoBase() { - this.roleID = int.Parse(Globals.glbRoleNothing); + this.roleId = int.Parse(Globals.glbRoleNothing); this.allowAccess = false; this.roleName = Null.NullString; - this.userID = Null.NullInteger; + this.userId = Null.NullInteger; this.username = Null.NullString; this.displayName = Null.NullString; } @@ -78,16 +78,17 @@ public string DisplayName /// [XmlElement("roleid")] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IPermissionInfo)}.{nameof(IPermissionInfo.RoleId)} instead. Scheduled for removal in v11.0.0.")] public int RoleID { get { - return this.roleID; + return ((IPermissionInfo)this).RoleId; } set { - this.roleID = value; + ((IPermissionInfo)this).RoleId = value; } } @@ -108,16 +109,17 @@ public string RoleName /// [XmlElement("userid")] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IPermissionInfo)}.{nameof(IPermissionInfo.UserId)} instead. Scheduled for removal in v11.0.0.")] public int UserID { get { - return this.userID; + return ((IPermissionInfo)this).UserId; } set { - this.userID = value; + ((IPermissionInfo)this).UserId = value; } } @@ -139,39 +141,40 @@ public string Username /// int IPermissionInfo.RoleId { - get => this.RoleID; - set => this.RoleID = value; + get => this.roleId; + set => this.roleId = value; } /// int IPermissionInfo.UserId { - get => this.UserID; - set => this.UserID = value; + get => this.userId; + set => this.userId = value; } /// FillInternal fills the PermissionInfoBase from a Data Reader. /// The Data Reader to use. protected override void FillInternal(IDataReader dr) { - // Call the base classes fill method to populate base class proeprties + // Call the base classes fill method to populate base class properties base.FillInternal(dr); - this.UserID = Null.SetNullInteger(dr["UserID"]); - this.Username = Null.SetNullString(dr["Username"]); - this.DisplayName = Null.SetNullString(dr["DisplayName"]); - if (this.UserID == Null.NullInteger) + var @this = (IPermissionInfo)this; + @this.UserId = Null.SetNullInteger(dr["UserID"]); + @this.Username = Null.SetNullString(dr["Username"]); + @this.DisplayName = Null.SetNullString(dr["DisplayName"]); + if (@this.UserId == Null.NullInteger) { - this.RoleID = Null.SetNullInteger(dr["RoleID"]); - this.RoleName = Null.SetNullString(dr["RoleName"]); + @this.RoleId = Null.SetNullInteger(dr["RoleID"]); + @this.RoleName = Null.SetNullString(dr["RoleName"]); } else { - this.RoleID = int.Parse(Globals.glbRoleNothing); - this.RoleName = string.Empty; + @this.RoleId = int.Parse(Globals.glbRoleNothing); + @this.RoleName = string.Empty; } - this.AllowAccess = Null.SetNullBoolean(dr["AllowAccess"]); + @this.AllowAccess = Null.SetNullBoolean(dr["AllowAccess"]); } } } From 83a6890149b2ae393b8a530749d12ceb71f5557b Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 24 Oct 2023 15:18:45 -0500 Subject: [PATCH 5/5] Extract IFolderPermissionInfo --- .../Permissions/IFolderPermissionInfo.cs | 21 +++ .../Permissions/IPermissionDefinitionInfo.cs | 4 +- .../Security/Permissions/IPermissionInfo.cs | 2 +- .../Permissions/FolderPermissionInfo.cs | 120 ++++++++++++++---- .../Services/FileSystem/FolderManager.cs | 17 ++- .../Components/PermissionHelper.cs | 39 +++--- 6 files changed, 148 insertions(+), 55 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IFolderPermissionInfo.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IFolderPermissionInfo.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IFolderPermissionInfo.cs new file mode 100644 index 00000000000..f678ee7fce6 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IFolderPermissionInfo.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Security.Permissions; + +/// Information about the application of an instance of a folder permission. +public interface IFolderPermissionInfo : IPermissionInfo +{ + /// Gets or sets the ID of the folder permission. + int FolderPermissionId { get; set; } + + /// Gets or sets the folder ID to which the permission applies. + int FolderId { get; set; } + + /// Gets or sets the path of the folder to which the permission applies. + string FolderPath { get; set; } + + /// Gets or sets the portal ID of the folder to which the permission applies. + int PortalId { get; set; } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs index eb5cd5a4437..d706817d907 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionDefinitionInfo.cs @@ -4,10 +4,10 @@ namespace DotNetNuke.Abstractions.Security.Permissions; -/// PermissionInfo provides the Entity Layer for Permissions. +/// Information about the definition of a permission. public interface IPermissionDefinitionInfo { - /// Gets or sets the Mdoule Definition ID. + /// Gets or sets the Module Definition ID. public int ModuleDefId { get; set; } /// Gets or sets the Permission Code. diff --git a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs index f67359b8540..c6d274e533b 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs +++ b/DNN Platform/DotNetNuke.Abstractions/Security/Permissions/IPermissionInfo.cs @@ -4,7 +4,7 @@ namespace DotNetNuke.Abstractions.Security.Permissions; -/// PermissionInfoBase provides a base class for PermissionInfo classes. +/// Information about an applied instance of a permission. public interface IPermissionInfo : IPermissionDefinitionInfo { /// Gets or sets a value indicating whether gets and sets a flag that indicates whether the user or role has permission. diff --git a/DNN Platform/Library/Security/Permissions/FolderPermissionInfo.cs b/DNN Platform/Library/Security/Permissions/FolderPermissionInfo.cs index 06b348923bf..8c21335f988 100644 --- a/DNN Platform/Library/Security/Permissions/FolderPermissionInfo.cs +++ b/DNN Platform/Library/Security/Permissions/FolderPermissionInfo.cs @@ -5,20 +5,21 @@ namespace DotNetNuke.Security.Permissions { using System; using System.Data; - using System.Xml.Serialization; - + using System.Xml.Serialization; + + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; - using Newtonsoft.Json; - + using Newtonsoft.Json; + [Serializable] - public class FolderPermissionInfo : PermissionInfoBase, IHydratable + public class FolderPermissionInfo : PermissionInfoBase, IHydratable, IFolderPermissionInfo { // local property declarations - private int folderID; + private int folderId; private string folderPath; - private int folderPermissionID; - private int portalID; + private int folderPermissionId; + private int portalId; /// /// Initializes a new instance of the class. @@ -26,10 +27,10 @@ public class FolderPermissionInfo : PermissionInfoBase, IHydratable /// public FolderPermissionInfo() { - this.folderPermissionID = Null.NullInteger; + this.folderPermissionId = Null.NullInteger; this.folderPath = Null.NullString; - this.portalID = Null.NullInteger; - this.folderID = Null.NullInteger; + this.portalId = Null.NullInteger; + this.folderId = Null.NullInteger; } /// @@ -38,57 +39,118 @@ public FolderPermissionInfo() /// /// A PermissionInfo object. public FolderPermissionInfo(PermissionInfo permission) + : this((IPermissionInfo)permission) + { + } + + /// + /// Initializes a new instance of the class. + /// Constructs a new FolderPermissionInfo. + /// + /// A PermissionInfo object. + public FolderPermissionInfo(IPermissionInfo permission) : this() { - this.ModuleDefID = permission.ModuleDefID; - this.PermissionCode = permission.PermissionCode; - this.PermissionID = permission.PermissionID; - this.PermissionKey = permission.PermissionKey; - this.PermissionName = permission.PermissionName; + var @this = (IPermissionDefinitionInfo)this; + @this.ModuleDefId = permission.ModuleDefId; + @this.PermissionCode = permission.PermissionCode; + @this.PermissionId = permission.PermissionId; + @this.PermissionKey = permission.PermissionKey; + @this.PermissionName = permission.PermissionName; } [XmlIgnore] [JsonIgnore] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IFolderPermissionInfo)}.{nameof(IFolderPermissionInfo.FolderPermissionId)} instead. Scheduled for removal in v11.0.0.")] public int FolderPermissionID { get { - return this.folderPermissionID; + return ((IFolderPermissionInfo)this).FolderPermissionId; } set { - this.folderPermissionID = value; + ((IFolderPermissionInfo)this).FolderPermissionId = value; } } [XmlIgnore] [JsonIgnore] + int IFolderPermissionInfo.FolderPermissionId + { + get + { + return this.folderPermissionId; + } + + set + { + this.folderPermissionId = value; + } + } + + [XmlIgnore] + [JsonIgnore] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IFolderPermissionInfo)}.{nameof(IFolderPermissionInfo.FolderId)} instead. Scheduled for removal in v11.0.0.")] public int FolderID { get { - return this.folderID; + return ((IFolderPermissionInfo)this).FolderId; } set { - this.folderID = value; + ((IFolderPermissionInfo)this).FolderId = value; } } [XmlIgnore] [JsonIgnore] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IFolderPermissionInfo)}.{nameof(IFolderPermissionInfo.FolderId)} instead. Scheduled for removal in v11.0.0.")] + int IFolderPermissionInfo.FolderId + { + get + { + return this.folderId; + } + + set + { + this.folderId = value; + } + } + + [XmlIgnore] + [JsonIgnore] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IFolderPermissionInfo)}.{nameof(IFolderPermissionInfo.PortalId)} instead. Scheduled for removal in v11.0.0.")] public int PortalID { get { - return this.portalID; + return ((IFolderPermissionInfo)this).PortalId; + } + + set + { + ((IFolderPermissionInfo)this).PortalId = value; + } + } + + [XmlIgnore] + [JsonIgnore] + [Obsolete($"Deprecated in DotNetNuke 9.13.1. Use {nameof(IFolderPermissionInfo)}.{nameof(IFolderPermissionInfo.PortalId)} instead. Scheduled for removal in v11.0.0.")] + int IFolderPermissionInfo.PortalId + { + get + { + return this.portalId; } set { - this.portalID = value; + this.portalId = value; } } @@ -114,12 +176,12 @@ public int KeyID { get { - return this.FolderPermissionID; + return ((IFolderPermissionInfo)this).FolderPermissionId; } set { - this.FolderPermissionID = value; + ((IFolderPermissionInfo)this).FolderPermissionId = value; } } @@ -128,10 +190,12 @@ public int KeyID public void Fill(IDataReader dr) { this.FillInternal(dr); - this.FolderPermissionID = Null.SetNullInteger(dr["FolderPermissionID"]); - this.FolderID = Null.SetNullInteger(dr["FolderID"]); - this.PortalID = Null.SetNullInteger(dr["PortalID"]); - this.FolderPath = Null.SetNullString(dr["FolderPath"]); + + var @this = (IFolderPermissionInfo)this; + @this.FolderPermissionId = Null.SetNullInteger(dr["FolderPermissionID"]); + @this.FolderId = Null.SetNullInteger(dr["FolderID"]); + @this.PortalId = Null.SetNullInteger(dr["PortalID"]); + @this.FolderPath = Null.SetNullString(dr["FolderPath"]); } } } diff --git a/DNN Platform/Library/Services/FileSystem/FolderManager.cs b/DNN Platform/Library/Services/FileSystem/FolderManager.cs index f5cc561a11d..687258d7520 100644 --- a/DNN Platform/Library/Services/FileSystem/FolderManager.cs +++ b/DNN Platform/Library/Services/FileSystem/FolderManager.cs @@ -17,6 +17,7 @@ namespace DotNetNuke.Services.FileSystem using System.Threading; using System.Web; + using DotNetNuke.Abstractions.Security.Permissions; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.ComponentModel; @@ -695,16 +696,14 @@ public virtual void CopyParentFolderPermissions(IFolderInfo folder) var parentFolderPath = folder.FolderPath.Substring(0, folder.FolderPath.Substring(0, folder.FolderPath.Length - 1).LastIndexOf("/", StringComparison.Ordinal) + 1); - foreach (FolderPermissionInfo objPermission in - this.GetFolderPermissionsFromSyncData(folder.PortalID, parentFolderPath)) + foreach (IFolderPermissionInfo objPermission in this.GetFolderPermissionsFromSyncData(folder.PortalID, parentFolderPath)) { - var folderPermission = new FolderPermissionInfo(objPermission) - { - FolderID = folder.FolderID, - RoleID = objPermission.RoleID, - UserID = objPermission.UserID, - AllowAccess = objPermission.AllowAccess, - }; + var folderPermission = new FolderPermissionInfo(objPermission); + IFolderPermissionInfo iFolderPermission = folderPermission; + iFolderPermission.FolderId = folder.FolderID; + iFolderPermission.RoleId = objPermission.RoleId; + iFolderPermission.UserId = objPermission.UserId; + iFolderPermission.AllowAccess = objPermission.AllowAccess; folder.FolderPermissions.Add(folderPermission, true); } diff --git a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs index e2936d161a3..1fbe580f9fc 100644 --- a/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs +++ b/DNN Platform/Modules/ResourceManager/Components/PermissionHelper.cs @@ -4,7 +4,6 @@ namespace Dnn.Modules.ResourceManager.Components { - using System.Collections; using System.Collections.Generic; using System.Linq; @@ -173,13 +172,18 @@ public static IEnumerable AsFolderPermissions(this IEnumer { return permissions.SelectMany( p => p.Permissions, - (p, permission) => new FolderPermissionInfo + (p, permission) => { - AllowAccess = permission.AllowAccess, - FolderID = folderId, - PermissionID = permission.PermissionId, - RoleID = p.RoleId, - UserID = Null.NullInteger, + var info = new FolderPermissionInfo + { + AllowAccess = permission.AllowAccess, + }; + IFolderPermissionInfo iInfo = info; + iInfo.FolderId = folderId; + iInfo.PermissionId = permission.PermissionId; + iInfo.RoleId = p.RoleId; + iInfo.UserId = Null.NullInteger; + return info; }); } @@ -191,13 +195,18 @@ public static IEnumerable AsFolderPermissions(this IEnumer { return permissions.SelectMany( p => p.Permissions, - (p, permission) => new FolderPermissionInfo + (p, permission) => { - AllowAccess = permission.AllowAccess, - FolderID = folderId, - PermissionID = permission.PermissionId, - RoleID = int.Parse(Globals.glbRoleNothing), - UserID = p.UserId, + var info = new FolderPermissionInfo + { + AllowAccess = permission.AllowAccess, + }; + IFolderPermissionInfo iInfo = info; + iInfo.FolderId = folderId; + iInfo.PermissionId = permission.PermissionId; + iInfo.RoleId = int.Parse(Globals.glbRoleNothing); + iInfo.UserId = p.UserId; + return info; }); } @@ -233,9 +242,9 @@ public static Permissions GetFolderPermissions( permissions.EnsureRole(role, true, true); } - foreach (FolderPermissionInfo permission in collection) + foreach (IFolderPermissionInfo permission in collection) { - if (permission.UserID != Null.NullInteger) + if (permission.UserId != Null.NullInteger) { permissions.AddUserPermission(permission); }