From 6e5496e9699ee74d7657aa79ec74287e6eb31fb2 Mon Sep 17 00:00:00 2001 From: hishamco Date: Wed, 21 Apr 2021 16:41:24 +0300 Subject: [PATCH 01/13] Exclude English from the languages list --- Oqtane.Client/Modules/Admin/Languages/Add.razor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Oqtane.Client/Modules/Admin/Languages/Add.razor b/Oqtane.Client/Modules/Admin/Languages/Add.razor index 7efbcf85..59115679 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Add.razor @@ -61,6 +61,10 @@ else { AddModuleMessage(Localizer["The Only Supported Culture That Has Been Defined Is English"], MessageType.Warning); } + else + { + _supportedCultures = _supportedCultures.Where(c => !c.Name.Equals(Constants.DefaultCulture)); + } } private async Task SaveLanguage() From c52f6c92f1e10275d32bcb761a087d7e5ce4cb11 Mon Sep 17 00:00:00 2001 From: hishamco Date: Wed, 21 Apr 2021 17:47:50 +0300 Subject: [PATCH 02/13] Add English to the language switcher --- Oqtane.Client/Themes/Controls/Theme/LanguageSwitcher.razor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Oqtane.Client/Themes/Controls/Theme/LanguageSwitcher.razor b/Oqtane.Client/Themes/Controls/Theme/LanguageSwitcher.razor index bd4ac6fc..64b1d196 100644 --- a/Oqtane.Client/Themes/Controls/Theme/LanguageSwitcher.razor +++ b/Oqtane.Client/Themes/Controls/Theme/LanguageSwitcher.razor @@ -27,6 +27,10 @@ protected override async Task OnParametersSetAsync() { var languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId); + var defaultCulture = CultureInfo.GetCultureInfo(Constants.DefaultCulture); + + languages.Add(new Language { Code = defaultCulture.Name, Name = defaultCulture.DisplayName }); + _supportedCultures = languages.Select(l => new Culture { Name = l.Code, DisplayName = l.Name }); } From 2780e4d02936826ad2a07b19d8d0bf56cbc33847 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 21 Apr 2021 19:31:02 -0400 Subject: [PATCH 03/13] modify nuget package installer to support satellite assemblies in subfolders --- .../Themes/OqtaneTheme/Themes/Default.razor | 6 +- .../OqtaneTheme/Themes/ThemeSettings.razor | 4 +- .../Infrastructure/InstallationManager.cs | 59 ++++++++++--------- .../Oqtane.Themes.OqtaneTheme/Theme.css | 1 + 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor b/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor index e2ff2270..3de4b465 100644 --- a/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor +++ b/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor @@ -93,10 +93,14 @@ @if (_footer) { - diff --git a/Oqtane.Client/Themes/OqtaneTheme/Themes/ThemeSettings.razor b/Oqtane.Client/Themes/OqtaneTheme/Themes/ThemeSettings.razor index baaa940f..05d0351b 100644 --- a/Oqtane.Client/Themes/OqtaneTheme/Themes/ThemeSettings.razor +++ b/Oqtane.Client/Themes/OqtaneTheme/Themes/ThemeSettings.razor @@ -7,10 +7,10 @@ @@ -140,9 +140,10 @@ else await UserRoleService.AddUserRoleAsync(userrole); } - await GetUserRoles(); await logger.LogInformation("User Assigned To Role {UserRole}", userrole); AddModuleMessage(Localizer["User Assigned To Role"], MessageType.Success); + await GetUserRoles(); + StateHasChanged(); } else { @@ -161,9 +162,10 @@ else try { await UserRoleService.DeleteUserRoleAsync(UserRoleId); - await GetUserRoles(); await logger.LogInformation("User Removed From Role {UserRoleId}", UserRoleId); AddModuleMessage(Localizer["User Removed From Role"], MessageType.Success); + await GetUserRoles(); + StateHasChanged(); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Users/Add.razor b/Oqtane.Client/Modules/Admin/Users/Add.razor index 89b1e775..176050d3 100644 --- a/Oqtane.Client/Modules/Admin/Users/Add.razor +++ b/Oqtane.Client/Modules/Admin/Users/Add.razor @@ -131,26 +131,34 @@ { if (password == confirm) { - var user = new User(); - user.SiteId = PageState.Site.SiteId; - user.Username = username; - user.Password = password; - user.Email = email; - user.DisplayName = string.IsNullOrWhiteSpace(displayname) ? username : displayname; - user.PhotoFileId = null; - - user = await UserService.AddUserAsync(user); - - if (user != null) + var user = await UserService.GetUserAsync(username, PageState.Site.SiteId); + if (user == null) { - await SettingService.UpdateUserSettingsAsync(settings, user.UserId); - await logger.LogInformation("User Created {User}", user); - NavigationManager.NavigateTo(NavigateUrl()); + user = new User(); + user.SiteId = PageState.Site.SiteId; + user.Username = username; + user.Password = password; + user.Email = email; + user.DisplayName = string.IsNullOrWhiteSpace(displayname) ? username : displayname; + user.PhotoFileId = null; + + user = await UserService.AddUserAsync(user); + + if (user != null) + { + await SettingService.UpdateUserSettingsAsync(settings, user.UserId); + await logger.LogInformation("User Created {User}", user); + NavigationManager.NavigateTo(NavigateUrl()); + } + else + { + await logger.LogError("Error Adding User {Username} {Email}", username, email); + AddModuleMessage(Localizer["Error Adding User. Please Ensure Password Meets Complexity Requirements And Username And Email Are Not Already In Use."], MessageType.Error); + } } else { - await logger.LogError("Error Adding User {Username} {Email}", username, email); - AddModuleMessage(Localizer["Error Adding User. Please Ensure Password Meets Complexity Requirements And Username Is Not Already In Use."], MessageType.Error); + AddModuleMessage(Localizer["Username Already Exists"], MessageType.Warning); } } else diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index e648083f..6b74a277 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -13,10 +13,15 @@ } else { - - -
- +
+
+ +
+
+
+   +
+
@@ -31,7 +36,10 @@ else
@@ -92,7 +92,14 @@ else userid = Int32.Parse(PageState.QueryString["id"]); User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId); name = user.DisplayName; - roles = await RoleService.GetRolesAsync(PageState.Site.SiteId); + if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) + { + roles = await RoleService.GetRolesAsync(PageState.Site.SiteId, true); + } + else + { + roles = await RoleService.GetRolesAsync(PageState.Site.SiteId); + } await GetUserRoles(); } catch (Exception ex) @@ -171,9 +178,10 @@ else await UserRoleService.AddUserRoleAsync(userrole); } - await GetUserRoles(); await logger.LogInformation("User Assigned To Role {UserRole}", userrole); AddModuleMessage(Localizer["User Assigned To Role"], MessageType.Success); + await GetUserRoles(); + StateHasChanged(); } else { @@ -192,9 +200,10 @@ else try { await UserRoleService.DeleteUserRoleAsync(UserRoleId); - await GetUserRoles(); await logger.LogInformation("User Removed From Role {UserRoleId}", UserRoleId); AddModuleMessage(Localizer["User Removed From Role"], MessageType.Success); + await GetUserRoles(); + StateHasChanged(); } catch (Exception ex) { diff --git a/Oqtane.Client/Services/Interfaces/IRoleService.cs b/Oqtane.Client/Services/Interfaces/IRoleService.cs index 23ae0d05..66edc8de 100644 --- a/Oqtane.Client/Services/Interfaces/IRoleService.cs +++ b/Oqtane.Client/Services/Interfaces/IRoleService.cs @@ -1,4 +1,4 @@ -using Oqtane.Models; +using Oqtane.Models; using System.Collections.Generic; using System.Threading.Tasks; @@ -8,6 +8,8 @@ namespace Oqtane.Services { Task> GetRolesAsync(int siteId); + Task> GetRolesAsync(int siteId, bool includeGlobalRoles); + Task GetRoleAsync(int roleId); Task AddRoleAsync(Role role); diff --git a/Oqtane.Client/Services/RoleService.cs b/Oqtane.Client/Services/RoleService.cs index d304edf3..5d29dcd3 100644 --- a/Oqtane.Client/Services/RoleService.cs +++ b/Oqtane.Client/Services/RoleService.cs @@ -1,4 +1,4 @@ -using Oqtane.Models; +using Oqtane.Models; using System.Threading.Tasks; using System.Net.Http; using System.Linq; @@ -22,7 +22,12 @@ namespace Oqtane.Services public async Task> GetRolesAsync(int siteId) { - List roles = await GetJsonAsync>($"{Apiurl}?siteid={siteId}"); + return await GetRolesAsync(siteId, false); + } + + public async Task> GetRolesAsync(int siteId, bool includeGlobalRoles) + { + List roles = await GetJsonAsync>($"{Apiurl}?siteid={siteId}&global={includeGlobalRoles}"); return roles.OrderBy(item => item.Name).ToList(); } diff --git a/Oqtane.Server/Controllers/RoleController.cs b/Oqtane.Server/Controllers/RoleController.cs index 708e20c3..d04a59cb 100644 --- a/Oqtane.Server/Controllers/RoleController.cs +++ b/Oqtane.Server/Controllers/RoleController.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using Oqtane.Enums; @@ -21,12 +21,16 @@ namespace Oqtane.Controllers _logger = logger; } - // GET: api/?siteid=x + // GET: api/?siteid=x&global=true/false [HttpGet] [Authorize(Roles = RoleNames.Registered)] - public IEnumerable Get(string siteid) + public IEnumerable Get(string siteid, string global) { - return _roles.GetRoles(int.Parse(siteid)); + if (string.IsNullOrEmpty(global)) + { + global = "false"; + } + return _roles.GetRoles(int.Parse(siteid), bool.Parse(global)); } // GET api//5 diff --git a/Oqtane.Server/Controllers/UserRoleController.cs b/Oqtane.Server/Controllers/UserRoleController.cs index 11c875de..437c1e9e 100644 --- a/Oqtane.Server/Controllers/UserRoleController.cs +++ b/Oqtane.Server/Controllers/UserRoleController.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using Oqtane.Enums; @@ -6,6 +6,7 @@ using Oqtane.Models; using Oqtane.Shared; using Oqtane.Infrastructure; using Oqtane.Repository; +using System.Linq; namespace Oqtane.Controllers { @@ -13,13 +14,15 @@ namespace Oqtane.Controllers public class UserRoleController : Controller { private readonly IUserRoleRepository _userRoles; + private readonly IRoleRepository _roles; private readonly ITenantResolver _tenants; private readonly ISyncManager _syncManager; private readonly ILogManager _logger; - public UserRoleController(IUserRoleRepository userRoles, ITenantResolver tenants, ISyncManager syncManager, ILogManager logger) + public UserRoleController(IUserRoleRepository userRoles, IRoleRepository roles, ITenantResolver tenants, ISyncManager syncManager, ILogManager logger) { _userRoles = userRoles; + _roles = roles; _syncManager = syncManager; _tenants = tenants; _logger = logger; @@ -46,8 +49,13 @@ namespace Oqtane.Controllers [Authorize(Roles = RoleNames.Admin)] public UserRole Post([FromBody] UserRole userRole) { - if (ModelState.IsValid) + var role = _roles.GetRole(userRole.RoleId); + if (ModelState.IsValid && (User.IsInRole(RoleNames.Host) || role.Name != RoleNames.Host)) { + if (role.Name == RoleNames.Host) + { + _userRoles.DeleteUserRoles(userRole.UserId); + } userRole = _userRoles.AddUserRole(userRole); _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); @@ -60,7 +68,8 @@ namespace Oqtane.Controllers [Authorize(Roles = RoleNames.Admin)] public UserRole Put(int id, [FromBody] UserRole userRole) { - if (ModelState.IsValid) + var role = _roles.GetRole(userRole.RoleId); + if (ModelState.IsValid && (User.IsInRole(RoleNames.Host) || role.Name != RoleNames.Host)) { userRole = _userRoles.UpdateUserRole(userRole); _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); @@ -75,9 +84,17 @@ namespace Oqtane.Controllers public void Delete(int id) { UserRole userRole = _userRoles.GetUserRole(id); - _userRoles.DeleteUserRole(id); - _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); - _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Deleted {UserRole}", userRole); + if (User.IsInRole(RoleNames.Host) || userRole.Role.Name != RoleNames.Host) + { + _userRoles.DeleteUserRole(id); + if (userRole.Role.Name == RoleNames.Host) + { + var role = _roles.GetRoles(_tenants.GetAlias().SiteId).FirstOrDefault(item => item.Name == RoleNames.Registered); + _userRoles.AddUserRole(new UserRole { UserId = userRole.UserId, RoleId = role.RoleId, EffectiveDate = null, ExpiryDate = null }); + } + _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Deleted {UserRole}", userRole); + } } } } diff --git a/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs b/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs index c46a0e50..b26eb5dc 100644 --- a/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs +++ b/Oqtane.Server/Repository/Interfaces/IUserRoleRepository.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using Oqtane.Models; namespace Oqtane.Repository @@ -11,5 +11,6 @@ namespace Oqtane.Repository UserRole UpdateUserRole(UserRole userRole); UserRole GetUserRole(int userRoleId); void DeleteUserRole(int userRoleId); + void DeleteUserRoles(int userId); } } diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index b376b470..f3974ba8 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -649,9 +649,9 @@ namespace Oqtane.Repository _roleRepository.AddRole(new Role {SiteId = site.SiteId, Name = RoleNames.Admin, Description = "Site Administrators", IsAutoAssigned = false, IsSystem = true}); _profileRepository.AddProfile(new Profile - {SiteId = site.SiteId, Name = "FirstName", Title = "First Name", Description = "Your First Or Given Name", Category = "Name", ViewOrder = 1, MaxLength = 50, DefaultValue = "", IsRequired = true, IsPrivate = false}); + {SiteId = site.SiteId, Name = "FirstName", Title = "First Name", Description = "Your First Or Given Name", Category = "Name", ViewOrder = 1, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false}); _profileRepository.AddProfile(new Profile - {SiteId = site.SiteId, Name = "LastName", Title = "Last Name", Description = "Your Last Or Family Name", Category = "Name", ViewOrder = 2, MaxLength = 50, DefaultValue = "", IsRequired = true, IsPrivate = false}); + {SiteId = site.SiteId, Name = "LastName", Title = "Last Name", Description = "Your Last Or Family Name", Category = "Name", ViewOrder = 2, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false}); _profileRepository.AddProfile(new Profile {SiteId = site.SiteId, Name = "Street", Title = "Street", Description = "Street Or Building Address", Category = "Address", ViewOrder = 3, MaxLength = 50, DefaultValue = "", IsRequired = false, IsPrivate = false}); _profileRepository.AddProfile( diff --git a/Oqtane.Server/Repository/UserRoleRepository.cs b/Oqtane.Server/Repository/UserRoleRepository.cs index b47bd6f7..d62156f5 100644 --- a/Oqtane.Server/Repository/UserRoleRepository.cs +++ b/Oqtane.Server/Repository/UserRoleRepository.cs @@ -58,5 +58,14 @@ namespace Oqtane.Repository _db.UserRole.Remove(userRole); _db.SaveChanges(); } + + public void DeleteUserRoles(int userId) + { + foreach (UserRole userRole in _db.UserRole.Where(item => item.Role.SiteId != null)) + { + _db.UserRole.Remove(userRole); + } + _db.SaveChanges(); + } } } From 5a519510a90018e021ee24f3b40ff93a1bad830a Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 23 Apr 2021 16:29:18 -0400 Subject: [PATCH 05/13] improve comments and logging --- .../Controllers/UserRoleController.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Oqtane.Server/Controllers/UserRoleController.cs b/Oqtane.Server/Controllers/UserRoleController.cs index 437c1e9e..d8fa360b 100644 --- a/Oqtane.Server/Controllers/UserRoleController.cs +++ b/Oqtane.Server/Controllers/UserRoleController.cs @@ -52,13 +52,17 @@ namespace Oqtane.Controllers var role = _roles.GetRole(userRole.RoleId); if (ModelState.IsValid && (User.IsInRole(RoleNames.Host) || role.Name != RoleNames.Host)) { + userRole = _userRoles.AddUserRole(userRole); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); + if (role.Name == RoleNames.Host) { + // host roles can only exist at global level - remove all site specific user roles _userRoles.DeleteUserRoles(userRole.UserId); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Roles Deleted For UserId {UserId}", userRole.UserId); } - userRole = _userRoles.AddUserRole(userRole); + _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); - _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); } return userRole; } @@ -87,13 +91,20 @@ namespace Oqtane.Controllers if (User.IsInRole(RoleNames.Host) || userRole.Role.Name != RoleNames.Host) { _userRoles.DeleteUserRole(id); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Deleted {UserRole}", userRole); + if (userRole.Role.Name == RoleNames.Host) { + // add site specific user roles to preserve user access var role = _roles.GetRoles(_tenants.GetAlias().SiteId).FirstOrDefault(item => item.Name == RoleNames.Registered); - _userRoles.AddUserRole(new UserRole { UserId = userRole.UserId, RoleId = role.RoleId, EffectiveDate = null, ExpiryDate = null }); + userRole = _userRoles.AddUserRole(new UserRole { UserId = userRole.UserId, RoleId = role.RoleId, EffectiveDate = null, ExpiryDate = null }); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Added {UserRole}", userRole); + role = _roles.GetRoles(_tenants.GetAlias().SiteId).FirstOrDefault(item => item.Name == RoleNames.Admin); + userRole = _userRoles.AddUserRole(new UserRole { UserId = userRole.UserId, RoleId = role.RoleId, EffectiveDate = null, ExpiryDate = null }); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Added {UserRole}", userRole); } + _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); - _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Deleted {UserRole}", userRole); } } } From d42c7a5ea5f7c7251c50d018177ed6c6763fd1ca Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 24 Apr 2021 13:47:20 -0400 Subject: [PATCH 06/13] user and role management improvements --- Oqtane.Client/Modules/Admin/Roles/Users.razor | 6 +++++- Oqtane.Client/Modules/Admin/Users/Index.razor | 5 +---- Oqtane.Client/Modules/Admin/Users/Roles.razor | 10 ++++++---- Oqtane.Server/Controllers/RoleController.cs | 10 +++++++--- Oqtane.Server/Controllers/UserRoleController.cs | 12 ++++++------ Oqtane.Server/Repository/RoleRepository.cs | 13 ++++++++++--- 6 files changed, 35 insertions(+), 21 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Roles/Users.razor b/Oqtane.Client/Modules/Admin/Roles/Users.razor index 16ab3a5e..c8049b18 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Users.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Users.razor @@ -58,12 +58,16 @@ else
+ + + + diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index 6b74a277..4245c649 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -36,10 +36,7 @@ else + + + + @@ -95,6 +96,7 @@ else if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { roles = await RoleService.GetRolesAsync(PageState.Site.SiteId, true); + roles = roles.Where(item => item.Name != RoleNames.Everyone).ToList(); } else { diff --git a/Oqtane.Server/Controllers/RoleController.cs b/Oqtane.Server/Controllers/RoleController.cs index d04a59cb..0e842509 100644 --- a/Oqtane.Server/Controllers/RoleController.cs +++ b/Oqtane.Server/Controllers/RoleController.cs @@ -28,7 +28,7 @@ namespace Oqtane.Controllers { if (string.IsNullOrEmpty(global)) { - global = "false"; + global = "False"; } return _roles.GetRoles(int.Parse(siteid), bool.Parse(global)); } @@ -72,8 +72,12 @@ namespace Oqtane.Controllers [Authorize(Roles = RoleNames.Admin)] public void Delete(int id) { - _roles.DeleteRole(id); - _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Role Deleted {RoleId}", id); + var role = _roles.GetRole(id); + if (!role.IsSystem) + { + _roles.DeleteRole(id); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "Role Deleted {RoleId}", id); + } } } } diff --git a/Oqtane.Server/Controllers/UserRoleController.cs b/Oqtane.Server/Controllers/UserRoleController.cs index d8fa360b..f7d9059d 100644 --- a/Oqtane.Server/Controllers/UserRoleController.cs +++ b/Oqtane.Server/Controllers/UserRoleController.cs @@ -52,16 +52,16 @@ namespace Oqtane.Controllers var role = _roles.GetRole(userRole.RoleId); if (ModelState.IsValid && (User.IsInRole(RoleNames.Host) || role.Name != RoleNames.Host)) { - userRole = _userRoles.AddUserRole(userRole); - _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); - if (role.Name == RoleNames.Host) { // host roles can only exist at global level - remove all site specific user roles _userRoles.DeleteUserRoles(userRole.UserId); - _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Roles Deleted For UserId {UserId}", userRole.UserId); + _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Roles Deleted For UserId {UserId}", userRole.UserId); } + userRole = _userRoles.AddUserRole(userRole); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); + _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); } return userRole; @@ -98,10 +98,10 @@ namespace Oqtane.Controllers // add site specific user roles to preserve user access var role = _roles.GetRoles(_tenants.GetAlias().SiteId).FirstOrDefault(item => item.Name == RoleNames.Registered); userRole = _userRoles.AddUserRole(new UserRole { UserId = userRole.UserId, RoleId = role.RoleId, EffectiveDate = null, ExpiryDate = null }); - _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Added {UserRole}", userRole); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); role = _roles.GetRoles(_tenants.GetAlias().SiteId).FirstOrDefault(item => item.Name == RoleNames.Admin); userRole = _userRoles.AddUserRole(new UserRole { UserId = userRole.UserId, RoleId = role.RoleId, EffectiveDate = null, ExpiryDate = null }); - _logger.Log(LogLevel.Information, this, LogFunction.Delete, "User Role Added {UserRole}", userRole); + _logger.Log(LogLevel.Information, this, LogFunction.Create, "User Role Added {UserRole}", userRole); } _syncManager.AddSyncEvent(_tenants.GetTenant().TenantId, EntityNames.User, userRole.UserId); diff --git a/Oqtane.Server/Repository/RoleRepository.cs b/Oqtane.Server/Repository/RoleRepository.cs index f41cc31f..b8afb4a4 100644 --- a/Oqtane.Server/Repository/RoleRepository.cs +++ b/Oqtane.Server/Repository/RoleRepository.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; using Oqtane.Models; @@ -16,12 +16,19 @@ namespace Oqtane.Repository public IEnumerable GetRoles(int siteId) { - return _db.Role.Where(item => item.SiteId == siteId); + return GetRoles(siteId, false); } public IEnumerable GetRoles(int siteId, bool includeGlobalRoles) { - return _db.Role.Where(item => item.SiteId == siteId || item.SiteId == null); + if (includeGlobalRoles) + { + return _db.Role.Where(item => item.SiteId == siteId || item.SiteId == null); + } + else + { + return _db.Role.Where(item => item.SiteId == siteId); + } } public Role AddRole(Role role) From 76c2a2f2f9ca994432201b154fc4d7f1ee9d79cc Mon Sep 17 00:00:00 2001 From: hishamco Date: Mon, 26 Apr 2021 01:55:27 +0300 Subject: [PATCH 07/13] Add English to supported cultures by default --- .../Infrastructure/LocalizationManager.cs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Oqtane.Server/Infrastructure/LocalizationManager.cs b/Oqtane.Server/Infrastructure/LocalizationManager.cs index 1ec6e740..998f3403 100644 --- a/Oqtane.Server/Infrastructure/LocalizationManager.cs +++ b/Oqtane.Server/Infrastructure/LocalizationManager.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Reflection; @@ -9,7 +10,7 @@ namespace Oqtane.Infrastructure public class LocalizationManager : ILocalizationManager { private static readonly string DefaultCulture = Constants.DefaultCulture; - private static readonly string[] SupportedCultures = new[] { DefaultCulture }; + private static readonly string[] DefaultSupportedCultures = new[] { DefaultCulture }; private readonly LocalizationOptions _localizationOptions; @@ -19,25 +20,19 @@ namespace Oqtane.Infrastructure } public string GetDefaultCulture() - => string.IsNullOrEmpty(_localizationOptions.DefaultCulture) + => String.IsNullOrEmpty(_localizationOptions.DefaultCulture) ? DefaultCulture : _localizationOptions.DefaultCulture; public string[] GetSupportedCultures() { - List cultures = new List(); + var cultures = new List(DefaultSupportedCultures); foreach(var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Oqtane.Client.resources.dll", SearchOption.AllDirectories)) { cultures.Add(Path.GetFileName(Path.GetDirectoryName(file))); } - if (cultures.Count == 0) - { - return SupportedCultures; - } - else - { - return cultures.ToArray(); - } + + return cultures.ToArray(); } } } From 55b69f0afc8e51d98720f309222982b29983353c Mon Sep 17 00:00:00 2001 From: hishamco Date: Mon, 26 Apr 2021 01:55:55 +0300 Subject: [PATCH 08/13] Order the cultures alphabatically --- Oqtane.Server/Infrastructure/LocalizationManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Oqtane.Server/Infrastructure/LocalizationManager.cs b/Oqtane.Server/Infrastructure/LocalizationManager.cs index 998f3403..83a9cf25 100644 --- a/Oqtane.Server/Infrastructure/LocalizationManager.cs +++ b/Oqtane.Server/Infrastructure/LocalizationManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; using Microsoft.Extensions.Options; using Oqtane.Shared; @@ -32,7 +33,7 @@ namespace Oqtane.Infrastructure cultures.Add(Path.GetFileName(Path.GetDirectoryName(file))); } - return cultures.ToArray(); + return cultures.OrderBy(c => c).ToArray(); } } } From a531a235a0bdb6f10280b365400f90a24a696e28 Mon Sep 17 00:00:00 2001 From: ijungleboy Date: Mon, 26 Apr 2021 13:51:37 +0200 Subject: [PATCH 09/13] Make version static-readonly https://github.com/oqtane/oqtane.framework/issues/1283 --- Oqtane.Shared/Shared/Constants.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Oqtane.Shared/Shared/Constants.cs b/Oqtane.Shared/Shared/Constants.cs index 28f065e6..8d8f64ec 100644 --- a/Oqtane.Shared/Shared/Constants.cs +++ b/Oqtane.Shared/Shared/Constants.cs @@ -5,7 +5,7 @@ namespace Oqtane.Shared { public class Constants { public const string PackageId = "Oqtane.Framework"; - public const string Version = "2.1.0"; + public static readonly string Version = "2.1.0"; public const string ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4,2.0.0,2.0.1,2.0.2,2.1.0"; public const string PageComponent = "Oqtane.UI.ThemeBuilder, Oqtane.Client"; From 189dcf5b903e8fb9221d9c88a929e14befeb1208 Mon Sep 17 00:00:00 2001 From: Leigh Pointer Date: Mon, 26 Apr 2021 15:38:33 +0200 Subject: [PATCH 10/13] Fix for Error with Footer on Oqtane Theme #1282 --- Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor | 1 + 1 file changed, 1 insertion(+) diff --git a/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor b/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor index 3de4b465..039ecc07 100644 --- a/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor +++ b/Oqtane.Client/Themes/OqtaneTheme/Themes/Default.razor @@ -93,6 +93,7 @@ @if (_footer) { +
From a79ba591fe39fcf9fee25ab5bd347de03f2eb765 Mon Sep 17 00:00:00 2001 From: Leigh Pointer Date: Wed, 28 Apr 2021 07:01:39 +0200 Subject: [PATCH 11/13] Make container fluid to fill the pane --- Oqtane.Client/Themes/OqtaneTheme/Containers/Container.razor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Oqtane.Client/Themes/OqtaneTheme/Containers/Container.razor b/Oqtane.Client/Themes/OqtaneTheme/Containers/Container.razor index 0f1dcafe..b90d8c32 100644 --- a/Oqtane.Client/Themes/OqtaneTheme/Containers/Container.razor +++ b/Oqtane.Client/Themes/OqtaneTheme/Containers/Container.razor @@ -17,7 +17,7 @@ }
-
+
@@ -27,7 +27,7 @@ public override string Name => "Customizable Container"; private bool _title = true; - private string _classes = "container"; + private string _classes = "container-fluid"; protected override void OnParametersSet() { From cad5ce51fc387a21dca041db230592101032560f Mon Sep 17 00:00:00 2001 From: Leigh Pointer Date: Wed, 28 Apr 2021 09:17:01 +0200 Subject: [PATCH 12/13] Fix NuGet Warning NU5048 Icon URL is deprecated in favor of embedding the icon inside the NuGet package. --- Oqtane.Server/Oqtane.Server.csproj | 3 +++ .../Package/[Owner].[Module].Package.csproj | 9 ++++++++- .../External/Package/[Owner].[Module].nuspec | 7 ++++--- .../Modules/Templates/External/Package/icon.png | Bin 0 -> 5235 bytes .../Package/[Owner].[Theme].Package.csproj | 11 +++++++++-- .../External/Package/[Owner].[Theme].nuspec | 7 ++++--- .../Themes/Templates/External/Package/icon.png | Bin 0 -> 5235 bytes 7 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 Oqtane.Server/wwwroot/Modules/Templates/External/Package/icon.png create mode 100644 Oqtane.Server/wwwroot/Themes/Templates/External/Package/icon.png diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj index 37f69666..df9fba63 100644 --- a/Oqtane.Server/Oqtane.Server.csproj +++ b/Oqtane.Server/Oqtane.Server.csproj @@ -59,6 +59,9 @@ + + + diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj index cef85f51..41dd5da4 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj @@ -1,10 +1,17 @@ - + net5.0 false + + + True + + + + diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec index df6e4997..a202b302 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec @@ -1,4 +1,4 @@ - + [Owner].[Module] @@ -11,7 +11,7 @@ false MIT https://github.com/oqtane/oqtane.framework - https://www.oqtane.org/Portals/0/icon.jpg + icon.png oqtane module @@ -26,6 +26,7 @@ - + + \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/icon.png b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..026f566b72e337a824210fbc2f33109545ba47eb GIT binary patch literal 5235 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 literal 0 HcmV?d00001 diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj index 30043010..35a85019 100644 --- a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj +++ b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj @@ -1,10 +1,17 @@ - + net5.0 false - + + + + True + + + + diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec index e73d4618..ab3f76ea 100644 --- a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec +++ b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec @@ -1,4 +1,4 @@ - + [Owner].[Theme] @@ -11,7 +11,7 @@ false MIT https://github.com/oqtane/oqtane.framework - https://www.oqtane.org/Portals/0/icon.jpg + icon.png oqtane module @@ -22,6 +22,7 @@ - + + \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/icon.png b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..026f566b72e337a824210fbc2f33109545ba47eb GIT binary patch literal 5235 zcmV-(6pZVMP)4Tx04UF6U|>>7EGWofVPIg$%_}Jia(7aQh>TKTf5^ZNguD!53<`?8>L2v|)>kTZ~d1ISiL&PW8B!T1Bn z)=5GVPe)=y?F9jDm(1dVoWx3n0AmKKgOb#W5)kd2UrRd;zE@x;V|)2rSRY_{rvp=qobpJ zeSMsqoLN~}1_lNL0|NyG1xiXv78Vu(0RaF201XWdsi~=lhlc_J0%&MxLqkJ1H#ZOv z5DW|qkB^T81O$J7e?dV(GBPq37Z(x|5`lq%aBy%tJ3BTuHVFv{2nYzYw6tn!YGq|* zD=RA?ARwZmqLY)8TwGjFPfryU6?u7iDk>@`Cnu$)r3wlPo}QjpS65L{Q4S6cZf(baZrcb8{LR8YCnnZEbC4W@cDeSQHc#p`oErP*9kdm|9v|EiEmAf`VsfXC59N zk&%%-Jv}fmFp`pzAt50P3ky6vJQEWWdwY9EMn)JI7*0-3M@L6FIXNjQDPCS)85tR> zs;WgrMN3Odg@uKVj*gI!kau@?goK1!TU(u-or#HwuCA^uEG(Own>95xWMpIy4-c%Y ztT8b$NJvO^b#+owQYI!Qva+&FOiV5=E^KUUnVFfWsHl~dm3Vk~X=!OqO-;46wIU)S zI5;>nGc&ffwmv>SnwpwjU0tuQuP-kzjg5^zKR>3Xri_e?dU|?OQ&VL}01%f+L_t(|Ufo>@gA~OT z?ivtwhOJ&L6c}YWT!LKU;sOgec&!M?<;5kqVL3z)LBwDX2^s@R#Dhd7MvX+H#v^y~ z|MI?9uXm2^s$ph(X1e)ycBZH6Rn`0Iy;oOv?*^@hQgV=e+%QaT7$Q0P$v#vtL5{Ky zbtA;Px?v(j1ru+YB*)ptS3hZKEnT6`sVc2ssA7;Aqy2XT{F;lZ2@3)$eOmZ6? zWt)nc781;K%Ok_SH6st#3X8WhlMFl99dN8L)HCrV%g)uSEt6TWM;4hV#DfZEg9Kpa zWRnMj=2&xuM;P9jRTg9rdi4p7Fr4?ZtWF+D>D+wkvIP1rdoFu`(hE4y8G0d3WRMB@ zky_MOCKAqDoJrSWm6ufTFyY8wEovnq&$;nIxq2!fjmLV=<6JsBmU`t6|3pzcdA z%i^4o+Wy`Fp1}*~Xkd93Euz$l$_T-+UYS86)YA@D8ib(3S(yxyIaMqGU0fw;8G=%) zMg0hv&#%d#MeZw5hg)M5U0N%t89>zL_d{{3|0pyzA+lo>UO+ui;Gshp5OAo&c@Hv^ zOpsw7>Y=jw411u%hbb*HOGT(TjaMR-zQxC8$j*S%&xF_NLGTFFF0ZN>%tTMNQkeiz znMNv;;$@5A3k{H3ucPEF_?C5?M~h=Ti>c5@9)n^gW{+s@^-!ABu5vEWptH0rflbm5 z&`=wSR`pmEu`J0#kdTfWx%C~;k7a`gDLJR6yQ+cSB$DX{H8w?v6EGET45b~U<7Vo3 zJ+2j+!WI!uH`G=i3+}kKWgtkDdc4SEp${e#QL@z^>O8ot6WLTkyk$#X^z~uT%BB>= zghq&NtP4G^MfNcHCnQTc!6tbU9Q+|-^a7SoDX?53Do@#kp_2+F=;=>Oo|J;7w7Ko9 zsVMD$ULqM%2?_N9|5ylM6cOok002?g*obtWgEvPZ7$ z;!UM=>2B}Las%d?z88|*YvC=8&ZX3|{$7_}T5lI=h6;w$cnRz0rRvR}T7cv}Qr>RQ z@y~{?kwua_Jy88@5T8wS-`>cVI7EV>&_S4z? zJ>?=&0Mg@t!?BoxJ=zDs$R>e0SVGiv^D&?4FsyEeSY4}e4fs6$^zG&67FZr{&+*D$ zAI33WslbeaH_!>%JfCB2BbASU2jv=>m==p*gxg3OXv0FJoY59j(l7UQzaMA)a!;PFmmg4DTo56KrkVZf1 zBSK-YzOuztu(#}346UD!M*EJyR=g!|yapi@53(c!nbxqG1US-NC%LfBJo1A|X%OjU zZ9G(rzQbk^sKd1eq;aZ9YHw9fEAt+*-6 zfk@qB5M&Mc?R1~$UJG-mLp&(fC#-UBWZ5Xty0D4#i>MHm(fK$F8dG|ek~_oYmxE3o z49umD@c0nvrzSIx7$StN9SIRM^BGTYNCNd(2x4RapV#_0(lK8g1FbtW=Tb|2cbwRU zFP^f-00~f8jbX*fz9ZM)Rj`~V?^cDe01d6rG6icA!t2o_V5~uKUZ4Awm1{57N2@6Z zsO9m@UYUn_aXPE(B2VR=7sl*AZ-xp8zL%YxA6iD!bd#b0yTZG_rXq?+SG zw%p|8Sk-t-a=1)F^Zl;1%(*Rw;o049hFF_;Cd{Q~jzv&A>?2oh9-%f{S(4@3g4IMp zwn1tTozaCkK@MIez|l_bv0}4DFmp+;B3lcA{htfoo)>CreX*)xDHFYRS^BZ26cpZ; z9IXcWpjT;$2a`CPR%+5!e^5$sOBIWV)6_h# zMci2_sXez2!9|8q9qSUW5UHBKAF?(}CDc(%!^0#D+cZ^CJMBK4LmfV?2bo2+QTXen z!Ps1*phQ!AT{5%^R;%BZq)rE5tiro28UuCN8z2^g*x07p@S8kPFkTC5R@^brcS@cZ zsN3q~$IRy_HyYg7W=aseXA(?M!F$l6jwDjXN6)qxq9>PSe zqPe0sT1ksuHx0}1cReEPhACETdnXLmE*c6w78!tJd8kn0sk$9s81AcA%6OnwFbgm8 z7f`)h1@2P!yR9n4YcrJ!X$2E1RRx2#78gJg8*OzIpwt5_&Y4^|W+jsc1>Olyc#yl1 zVy1L5687Tu0@H9)p;=DrZVt{(^HoeFsdoHrvpVg_J6*p=CV#iVYpj;w(b&bU02aYB zZQ_JJfT~*R?J>Bx4Xx>YbHO=(&4iJUtgHw2&NEumpy%?rs&3iS8E@9vH=#-K3ML#( z@Myp(5O}Z7b`s4H7Po?lQdjD@LKyB5QTyQl5ru#Xj(MF6G(B_Aap2~XuU@3}M2l1p z6G_6yeKpraYd|y)cnWG3DtN@pgM7O9aRc=t;NQS(hX>fWk|`}u>t!aLBq6nx3inab zGaITAG5;7BNWU@V@-psYOFdq7pBbeeJ zA=E&9HbxW;Cdlt7n_6zO6(2t$-G(_VoorT%SmQVbE4#aqs+-Wq2kW8TvW*@Kt#@15 zCUBXG^>m0wsY|f8r;Zm=h;zSyd(UIzsA|O17lz?6%o4n<3mNE>5WXr6SP19Cn8zH7Cs^nuQ8J!^WeN zO#X8gN(Qv3!x9_5Jhnod9p7}DZ} zo@vDc?7k4WW}t%e-0?Y}7bF+zz*|yoEHwToann$Td_=Q>HHi9B%8dsGt>$sfH`z)sMhME&Yr(-Ui(GSf$mdz%nIsJosH@OdimrtY z4~tlHI4|YIBDufVLG3|((lE-jMaN)#e-j=XW^No$Y^@6>>Qgrjnimf>Uk?r2vwSN= z^JftpH>{2qTtwh1d|?Z5!0;F~ zjsdp}-tRa$PYSLD^V9f;FU>&({T>=&ShDpe02nqGD88N>=K`$70TFHjUzJdT)3tcb zo`h>zCUvhT-(+Q*z+HGW)(tFmlHnn^GJ3aJHLQ_}G?8cw5_>^_{|*%ku24^bR5HG0 zv4nLVTPdH>Vb`R{bk_^W((l*Car+kbXDMM0mzp4xm#zKd>ZEfz{IJ1w97(f+NAb^y zVvA+WOa8yBdG1AospjDdY-3x3Xy(6Qn<>^LXdWGQ<7#%2o)rXV&~h1pmOu(8(V0SR2G+5-#GAD zGqRkd8mdt(?&8KFBJl->16&~4I!PwoQfCe5q}9SS)&;{8dmZ`%NHT9(*+h8+D_zZI zVT_qeQmE2bZDrb7cX-(LG0%u(f>6PvJQeM%843B7B*s797NkTti#qNI4gvA#xg=SV zgbJ4VD(2DB;NS3AuW^I>E5b@Vjp=R}r0inB#BmKzBY8kv@^%@N^H5bPg{0yuHoL=pGl+l_F7?yDE6!AXmDFoJZ$GhZ>IasZ+@gq=!q?lPky*K ziAyXcc`%HbHT=`HgI{l&eejVBR|ky2+<@Wc!722X zpWh;TFldZ8W~*{CsZbF;EI#-P9q}fEU5WE47a*XQQPUBXmat);{aev%4yXYyuXxl& zj_?k*gPL_4LJ#tt&@F;(oxfu=c5`7xkZd)I0Bg{Tv)V9n0%`h5%-C9G5exO4PYc$A z1lv>xPutb6VCoJi9kB09{U z`yRe4m9z(|Xl;U4MEB(%s_TI%@TVU7R!VOtcAsN4?1ZFg@HPMs=kz&kQhSXdIJp!W zh#KR97-S>IdE1c-KH0}=08KNo8#DMdxP7JrO!%+R+?Gc#JWhMSq$VsrtoSc9cL+;l zhp2gr;6+h3{TnH<-9RUa@ps2M7)7*d7TWaRO!l>}jsSF~kWt3L1hyRbiA!t4#KZ#? z+_w;65;+$>>+q@+rMJRk?O1+X7ydQGdxxYL507P5F`y*-f+XISwrlm_hmDln!#$O& zt$Lm&Ji)ogZj5#+HY#Ctc<_YXn6`ZC_sGoE^lkrTYuDusfb_`G4}IL-%YQ!1>sXOB zK)Sd!dbqc_!Pdnqv;fqfl_9Hp||ajej{*>9=o zasA*%N9@y&bO8*|0EH}>M0B#(Y3>_!>h<%H}9))*4#+%hW tx=)ZkGC>C_vYOSp(l>D9kK_>q{|A(3{Dh$Ey&nJo002ovPDHLkV1gv!i_8E3 literal 0 HcmV?d00001 From 6ae5777e1cc10a141f73487281aa0b3fca7d7855 Mon Sep 17 00:00:00 2001 From: Leigh Pointer Date: Wed, 28 Apr 2021 20:31:52 +0200 Subject: [PATCH 13/13] Revert "Fix NuGet Warning NU5048" This reverts commit cad5ce51fc387a21dca041db230592101032560f. --- Oqtane.Server/Oqtane.Server.csproj | 3 --- .../Package/[Owner].[Module].Package.csproj | 9 +-------- .../External/Package/[Owner].[Module].nuspec | 7 +++---- .../Modules/Templates/External/Package/icon.png | Bin 5235 -> 0 bytes .../Package/[Owner].[Theme].Package.csproj | 11 ++--------- .../External/Package/[Owner].[Theme].nuspec | 7 +++---- .../Themes/Templates/External/Package/icon.png | Bin 5235 -> 0 bytes 7 files changed, 9 insertions(+), 28 deletions(-) delete mode 100644 Oqtane.Server/wwwroot/Modules/Templates/External/Package/icon.png delete mode 100644 Oqtane.Server/wwwroot/Themes/Templates/External/Package/icon.png diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj index df9fba63..37f69666 100644 --- a/Oqtane.Server/Oqtane.Server.csproj +++ b/Oqtane.Server/Oqtane.Server.csproj @@ -59,9 +59,6 @@ - - - diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj index 41dd5da4..cef85f51 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].Package.csproj @@ -1,17 +1,10 @@ - + net5.0 false - - - True - - - - diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec index a202b302..df6e4997 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/[Owner].[Module].nuspec @@ -1,4 +1,4 @@ - + [Owner].[Module] @@ -11,7 +11,7 @@ false MIT https://github.com/oqtane/oqtane.framework - icon.png + https://www.oqtane.org/Portals/0/icon.jpg oqtane module @@ -26,7 +26,6 @@ - - + \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Package/icon.png b/Oqtane.Server/wwwroot/Modules/Templates/External/Package/icon.png deleted file mode 100644 index 026f566b72e337a824210fbc2f33109545ba47eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5235 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 diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj index 35a85019..30043010 100644 --- a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj +++ b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].Package.csproj @@ -1,17 +1,10 @@ - + net5.0 false - - - - True - - - - + diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec index ab3f76ea..e73d4618 100644 --- a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec +++ b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/[Owner].[Theme].nuspec @@ -1,4 +1,4 @@ - + [Owner].[Theme] @@ -11,7 +11,7 @@ false MIT https://github.com/oqtane/oqtane.framework - icon.png + https://www.oqtane.org/Portals/0/icon.jpg oqtane module @@ -22,7 +22,6 @@ - - + \ No newline at end of file diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Package/icon.png b/Oqtane.Server/wwwroot/Themes/Templates/External/Package/icon.png deleted file mode 100644 index 026f566b72e337a824210fbc2f33109545ba47eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5235 zcmV-(6pZVMP)4Tx04UF6U|>>7EGWofVPIg$%_}Jia(7aQh>TKTf5^ZNguD!53<`?8>L2v|)>kTZ~d1ISiL&PW8B!T1Bn z)=5GVPe)=y?F9jDm(1dVoWx3n0AmKKgOb#W5)kd2UrRd;zE@x;V|)2rSRY_{rvp=qobpJ zeSMsqoLN~}1_lNL0|NyG1xiXv78Vu(0RaF201XWdsi~=lhlc_J0%&MxLqkJ1H#ZOv z5DW|qkB^T81O$J7e?dV(GBPq37Z(x|5`lq%aBy%tJ3BTuHVFv{2nYzYw6tn!YGq|* zD=RA?ARwZmqLY)8TwGjFPfryU6?u7iDk>@`Cnu$)r3wlPo}QjpS65L{Q4S6cZf(baZrcb8{LR8YCnnZEbC4W@cDeSQHc#p`oErP*9kdm|9v|EiEmAf`VsfXC59N zk&%%-Jv}fmFp`pzAt50P3ky6vJQEWWdwY9EMn)JI7*0-3M@L6FIXNjQDPCS)85tR> zs;WgrMN3Odg@uKVj*gI!kau@?goK1!TU(u-or#HwuCA^uEG(Own>95xWMpIy4-c%Y ztT8b$NJvO^b#+owQYI!Qva+&FOiV5=E^KUUnVFfWsHl~dm3Vk~X=!OqO-;46wIU)S zI5;>nGc&ffwmv>SnwpwjU0tuQuP-kzjg5^zKR>3Xri_e?dU|?OQ&VL}01%f+L_t(|Ufo>@gA~OT z?ivtwhOJ&L6c}YWT!LKU;sOgec&!M?<;5kqVL3z)LBwDX2^s@R#Dhd7MvX+H#v^y~ z|MI?9uXm2^s$ph(X1e)ycBZH6Rn`0Iy;oOv?*^@hQgV=e+%QaT7$Q0P$v#vtL5{Ky zbtA;Px?v(j1ru+YB*)ptS3hZKEnT6`sVc2ssA7;Aqy2XT{F;lZ2@3)$eOmZ6? zWt)nc781;K%Ok_SH6st#3X8WhlMFl99dN8L)HCrV%g)uSEt6TWM;4hV#DfZEg9Kpa zWRnMj=2&xuM;P9jRTg9rdi4p7Fr4?ZtWF+D>D+wkvIP1rdoFu`(hE4y8G0d3WRMB@ zky_MOCKAqDoJrSWm6ufTFyY8wEovnq&$;nIxq2!fjmLV=<6JsBmU`t6|3pzcdA z%i^4o+Wy`Fp1}*~Xkd93Euz$l$_T-+UYS86)YA@D8ib(3S(yxyIaMqGU0fw;8G=%) zMg0hv&#%d#MeZw5hg)M5U0N%t89>zL_d{{3|0pyzA+lo>UO+ui;Gshp5OAo&c@Hv^ zOpsw7>Y=jw411u%hbb*HOGT(TjaMR-zQxC8$j*S%&xF_NLGTFFF0ZN>%tTMNQkeiz znMNv;;$@5A3k{H3ucPEF_?C5?M~h=Ti>c5@9)n^gW{+s@^-!ABu5vEWptH0rflbm5 z&`=wSR`pmEu`J0#kdTfWx%C~;k7a`gDLJR6yQ+cSB$DX{H8w?v6EGET45b~U<7Vo3 zJ+2j+!WI!uH`G=i3+}kKWgtkDdc4SEp${e#QL@z^>O8ot6WLTkyk$#X^z~uT%BB>= zghq&NtP4G^MfNcHCnQTc!6tbU9Q+|-^a7SoDX?53Do@#kp_2+F=;=>Oo|J;7w7Ko9 zsVMD$ULqM%2?_N9|5ylM6cOok002?g*obtWgEvPZ7$ z;!UM=>2B}Las%d?z88|*YvC=8&ZX3|{$7_}T5lI=h6;w$cnRz0rRvR}T7cv}Qr>RQ z@y~{?kwua_Jy88@5T8wS-`>cVI7EV>&_S4z? zJ>?=&0Mg@t!?BoxJ=zDs$R>e0SVGiv^D&?4FsyEeSY4}e4fs6$^zG&67FZr{&+*D$ zAI33WslbeaH_!>%JfCB2BbASU2jv=>m==p*gxg3OXv0FJoY59j(l7UQzaMA)a!;PFmmg4DTo56KrkVZf1 zBSK-YzOuztu(#}346UD!M*EJyR=g!|yapi@53(c!nbxqG1US-NC%LfBJo1A|X%OjU zZ9G(rzQbk^sKd1eq;aZ9YHw9fEAt+*-6 zfk@qB5M&Mc?R1~$UJG-mLp&(fC#-UBWZ5Xty0D4#i>MHm(fK$F8dG|ek~_oYmxE3o z49umD@c0nvrzSIx7$StN9SIRM^BGTYNCNd(2x4RapV#_0(lK8g1FbtW=Tb|2cbwRU zFP^f-00~f8jbX*fz9ZM)Rj`~V?^cDe01d6rG6icA!t2o_V5~uKUZ4Awm1{57N2@6Z zsO9m@UYUn_aXPE(B2VR=7sl*AZ-xp8zL%YxA6iD!bd#b0yTZG_rXq?+SG zw%p|8Sk-t-a=1)F^Zl;1%(*Rw;o049hFF_;Cd{Q~jzv&A>?2oh9-%f{S(4@3g4IMp zwn1tTozaCkK@MIez|l_bv0}4DFmp+;B3lcA{htfoo)>CreX*)xDHFYRS^BZ26cpZ; z9IXcWpjT;$2a`CPR%+5!e^5$sOBIWV)6_h# zMci2_sXez2!9|8q9qSUW5UHBKAF?(}CDc(%!^0#D+cZ^CJMBK4LmfV?2bo2+QTXen z!Ps1*phQ!AT{5%^R;%BZq)rE5tiro28UuCN8z2^g*x07p@S8kPFkTC5R@^brcS@cZ zsN3q~$IRy_HyYg7W=aseXA(?M!F$l6jwDjXN6)qxq9>PSe zqPe0sT1ksuHx0}1cReEPhACETdnXLmE*c6w78!tJd8kn0sk$9s81AcA%6OnwFbgm8 z7f`)h1@2P!yR9n4YcrJ!X$2E1RRx2#78gJg8*OzIpwt5_&Y4^|W+jsc1>Olyc#yl1 zVy1L5687Tu0@H9)p;=DrZVt{(^HoeFsdoHrvpVg_J6*p=CV#iVYpj;w(b&bU02aYB zZQ_JJfT~*R?J>Bx4Xx>YbHO=(&4iJUtgHw2&NEumpy%?rs&3iS8E@9vH=#-K3ML#( z@Myp(5O}Z7b`s4H7Po?lQdjD@LKyB5QTyQl5ru#Xj(MF6G(B_Aap2~XuU@3}M2l1p z6G_6yeKpraYd|y)cnWG3DtN@pgM7O9aRc=t;NQS(hX>fWk|`}u>t!aLBq6nx3inab zGaITAG5;7BNWU@V@-psYOFdq7pBbeeJ zA=E&9HbxW;Cdlt7n_6zO6(2t$-G(_VoorT%SmQVbE4#aqs+-Wq2kW8TvW*@Kt#@15 zCUBXG^>m0wsY|f8r;Zm=h;zSyd(UIzsA|O17lz?6%o4n<3mNE>5WXr6SP19Cn8zH7Cs^nuQ8J!^WeN zO#X8gN(Qv3!x9_5Jhnod9p7}DZ} zo@vDc?7k4WW}t%e-0?Y}7bF+zz*|yoEHwToann$Td_=Q>HHi9B%8dsGt>$sfH`z)sMhME&Yr(-Ui(GSf$mdz%nIsJosH@OdimrtY z4~tlHI4|YIBDufVLG3|((lE-jMaN)#e-j=XW^No$Y^@6>>Qgrjnimf>Uk?r2vwSN= z^JftpH>{2qTtwh1d|?Z5!0;F~ zjsdp}-tRa$PYSLD^V9f;FU>&({T>=&ShDpe02nqGD88N>=K`$70TFHjUzJdT)3tcb zo`h>zCUvhT-(+Q*z+HGW)(tFmlHnn^GJ3aJHLQ_}G?8cw5_>^_{|*%ku24^bR5HG0 zv4nLVTPdH>Vb`R{bk_^W((l*Car+kbXDMM0mzp4xm#zKd>ZEfz{IJ1w97(f+NAb^y zVvA+WOa8yBdG1AospjDdY-3x3Xy(6Qn<>^LXdWGQ<7#%2o)rXV&~h1pmOu(8(V0SR2G+5-#GAD zGqRkd8mdt(?&8KFBJl->16&~4I!PwoQfCe5q}9SS)&;{8dmZ`%NHT9(*+h8+D_zZI zVT_qeQmE2bZDrb7cX-(LG0%u(f>6PvJQeM%843B7B*s797NkTti#qNI4gvA#xg=SV zgbJ4VD(2DB;NS3AuW^I>E5b@Vjp=R}r0inB#BmKzBY8kv@^%@N^H5bPg{0yuHoL=pGl+l_F7?yDE6!AXmDFoJZ$GhZ>IasZ+@gq=!q?lPky*K ziAyXcc`%HbHT=`HgI{l&eejVBR|ky2+<@Wc!722X zpWh;TFldZ8W~*{CsZbF;EI#-P9q}fEU5WE47a*XQQPUBXmat);{aev%4yXYyuXxl& zj_?k*gPL_4LJ#tt&@F;(oxfu=c5`7xkZd)I0Bg{Tv)V9n0%`h5%-C9G5exO4PYc$A z1lv>xPutb6VCoJi9kB09{U z`yRe4m9z(|Xl;U4MEB(%s_TI%@TVU7R!VOtcAsN4?1ZFg@HPMs=kz&kQhSXdIJp!W zh#KR97-S>IdE1c-KH0}=08KNo8#DMdxP7JrO!%+R+?Gc#JWhMSq$VsrtoSc9cL+;l zhp2gr;6+h3{TnH<-9RUa@ps2M7)7*d7TWaRO!l>}jsSF~kWt3L1hyRbiA!t4#KZ#? z+_w;65;+$>>+q@+rMJRk?O1+X7ydQGdxxYL507P5F`y*-f+XISwrlm_hmDln!#$O& zt$Lm&Ji)ogZj5#+HY#Ctc<_YXn6`ZC_sGoE^lkrTYuDusfb_`G4}IL-%YQ!1>sXOB zK)Sd!dbqc_!Pdnqv;fqfl_9Hp||ajej{*>9=o zasA*%N9@y&bO8*|0EH}>M0B#(Y3>_!>h<%H}9))*4#+%hW tx=)ZkGC>C_vYOSp(l>D9kK_>q{|A(3{Dh$Ey&nJo002ovPDHLkV1gv!i_8E3
- + - diff --git a/Oqtane.Server/Infrastructure/InstallationManager.cs b/Oqtane.Server/Infrastructure/InstallationManager.cs index 3962baf5..ef3b0b7e 100644 --- a/Oqtane.Server/Infrastructure/InstallationManager.cs +++ b/Oqtane.Server/Infrastructure/InstallationManager.cs @@ -38,7 +38,7 @@ namespace Oqtane.Infrastructure public static bool InstallPackages(string folders, string webRootPath, string contentRootPath) { bool install = false; - string binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location); + string binPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location); foreach (string folder in folders.Split(',')) { @@ -82,40 +82,37 @@ namespace Oqtane.Infrastructure List assets = new List(); bool manifest = false; - // module and theme packages must be in form of name.1.0.0.nupkg + // packages are in form of name.1.0.0.nupkg or name.culture.1.0.0.nupkg string name = Path.GetFileNameWithoutExtension(packagename); string[] segments = name?.Split('.'); - if (segments != null) name = string.Join('.', segments, 0, segments.Length - 3); + if (segments != null) name = string.Join('.', segments, 0, segments.Length - 3); // remove version information // deploy to appropriate locations foreach (ZipArchiveEntry entry in archive.Entries) { - string foldername = Path.GetDirectoryName(entry.FullName).Split(Path.DirectorySeparatorChar)[0]; - string filename = Path.GetFileName(entry.FullName); + string filename = ""; - if (!manifest && filename == "assets.json") + // evaluate entry root folder + switch (entry.FullName.Split('/')[0]) { - manifest = true; + case "lib": // lib/net5.0/... + filename = ExtractFile(entry, binPath, 2); + break; + case "wwwroot": // wwwroot/... + filename = ExtractFile(entry, webRootPath, 1); + break; + case "runtimes": // runtimes/name/... + filename = ExtractFile(entry, binPath, 0); + break; } - switch (foldername) + if (filename != "") { - case "lib": - filename = Path.Combine(binFolder, filename); - ExtractFile(entry, filename); - assets.Add(filename.Replace(contentRootPath, "")); - break; - case "wwwroot": - filename = Path.Combine(webRootPath, Utilities.PathCombine(entry.FullName.Replace("wwwroot/", "").Split('/'))); - ExtractFile(entry, filename); - assets.Add(filename.Replace(contentRootPath, "")); - break; - case "runtimes": - var destSubFolder = Path.GetDirectoryName(entry.FullName); - filename = Path.Combine(binFolder, destSubFolder, filename); - ExtractFile(entry, filename); - assets.Add(filename.Replace(contentRootPath, "")); - break; + assets.Add(filename.Replace(contentRootPath, "")); + if (!manifest && Path.GetFileName(filename) == "assets.json") + { + manifest = true; + } } } @@ -145,21 +142,25 @@ namespace Oqtane.Infrastructure return install; } - private static void ExtractFile(ZipArchiveEntry entry, string filename) + private static string ExtractFile(ZipArchiveEntry entry, string folder, int ignoreLeadingSegments) { - if (!Directory.Exists(Path.GetDirectoryName(filename))) - { - Directory.CreateDirectory(Path.GetDirectoryName(filename)); - } + string[] segments = entry.FullName.Split('/'); // ZipArchiveEntries always use unix path separator + string filename = Path.Combine(folder, string.Join(Path.DirectorySeparatorChar, segments, ignoreLeadingSegments, segments.Length - ignoreLeadingSegments)); try { + if (!Directory.Exists(Path.GetDirectoryName(filename))) + { + Directory.CreateDirectory(Path.GetDirectoryName(filename)); + } entry.ExtractToFile(filename, true); } catch { // an error occurred extracting the file + filename = ""; } + return filename; } public void UpgradeFramework() diff --git a/Oqtane.Server/wwwroot/Themes/Oqtane.Themes.OqtaneTheme/Theme.css b/Oqtane.Server/wwwroot/Themes/Oqtane.Themes.OqtaneTheme/Theme.css index a4c5f957..e95b6d11 100644 --- a/Oqtane.Server/wwwroot/Themes/Oqtane.Themes.OqtaneTheme/Theme.css +++ b/Oqtane.Server/wwwroot/Themes/Oqtane.Themes.OqtaneTheme/Theme.css @@ -55,6 +55,7 @@ div.app-moduleactions a.dropdown-toggle, div.app-moduleactions div.dropdown-menu min-height: 40px; text-align: center; color: #ffffff; + z-index: 1000; } @media (max-width: 767px) { From 9d083726be86e81b8f238fce987f14c5d10cdd09 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Fri, 23 Apr 2021 16:11:35 -0400 Subject: [PATCH 04/13] user and role management improvements --- Oqtane.Client/Modules/Admin/Roles/Users.razor | 8 ++-- Oqtane.Client/Modules/Admin/Users/Add.razor | 40 +++++++++++-------- Oqtane.Client/Modules/Admin/Users/Index.razor | 38 +++++++++++------- Oqtane.Client/Modules/Admin/Users/Roles.razor | 23 +++++++---- .../Services/Interfaces/IRoleService.cs | 4 +- Oqtane.Client/Services/RoleService.cs | 9 ++++- Oqtane.Server/Controllers/RoleController.cs | 12 ++++-- .../Controllers/UserRoleController.cs | 31 ++++++++++---- .../Interfaces/IUserRoleRepository.cs | 3 +- Oqtane.Server/Repository/SiteRepository.cs | 4 +- .../Repository/UserRoleRepository.cs | 9 +++++ 11 files changed, 123 insertions(+), 58 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Roles/Users.razor b/Oqtane.Client/Modules/Admin/Roles/Users.razor index b9dcd431..16ab3a5e 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Users.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Users.razor @@ -63,7 +63,7 @@ else @context.User.DisplayName - + - + @if (context.Role.Name != RoleNames.Host) + { + + } @@ -57,19 +65,19 @@ else private List Search(string search) { + var results = allroles.Where(item => item.Role.Name == RoleNames.Registered || (item.Role.Name == RoleNames.Host && UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))); + if (string.IsNullOrEmpty(_search)) { - return allroles.Where(item => item.Role.Name == RoleNames.Registered).ToList(); + results = results.Where(item => + ( + item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || + item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || + item.User.DisplayName.Contains(search, StringComparison.OrdinalIgnoreCase) + ) + ); } - return allroles - .Where(item => item.Role.Name == RoleNames.Registered && - ( - item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || - item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || - item.User.DisplayName.Contains(search, StringComparison.OrdinalIgnoreCase) - ) - ) - .ToList(); + return results.ToList(); } private async Task OnSearch() diff --git a/Oqtane.Client/Modules/Admin/Users/Roles.razor b/Oqtane.Client/Modules/Admin/Users/Roles.razor index 037daabb..03d9e32e 100644 --- a/Oqtane.Client/Modules/Admin/Users/Roles.razor +++ b/Oqtane.Client/Modules/Admin/Users/Roles.razor @@ -64,10 +64,10 @@ else @context.Role.Name - @if (context.Role.Name != RoleNames.Registered) - { - - } + @if (context.Role.Name != RoleNames.Registered && (context.Role.Name != RoleNames.Host || userid != PageState.User.UserId)) + { + + } @Localizer["Users"]@Localizer["Effective"]@Localizer["Expiry"]   @context.User.DisplayName@context.EffectiveDate@context.ExpiryDate - + - @if (context.Role.Name != RoleNames.Host) - { - - } + diff --git a/Oqtane.Client/Modules/Admin/Users/Roles.razor b/Oqtane.Client/Modules/Admin/Users/Roles.razor index 03d9e32e..13c4e780 100644 --- a/Oqtane.Client/Modules/Admin/Users/Roles.razor +++ b/Oqtane.Client/Modules/Admin/Users/Roles.razor @@ -59,15 +59,16 @@ else
@Localizer["Roles"]@Localizer["Effective"]@Localizer["Expiry"]   @context.Role.Name@context.EffectiveDate@context.ExpiryDate - @if (context.Role.Name != RoleNames.Registered && (context.Role.Name != RoleNames.Host || userid != PageState.User.UserId)) - { - - } +