From da890f32d16c87b13cb71de52862998b875e3ef1 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Mon, 2 Sep 2019 14:21:31 -0400 Subject: [PATCH] Added support for Deny permissions to PermissionGrid --- .../Modules/Controls/PermissionGrid.razor | 47 ++++++++++---- .../Modules/Controls/TriStateCheckBox.razor | 60 ++++++++++++++++++ Oqtane.Client/wwwroot/images/checked.png | Bin 0 -> 427 bytes Oqtane.Client/wwwroot/images/null.png | Bin 0 -> 177 bytes Oqtane.Client/wwwroot/images/unchecked.png | Bin 0 -> 438 bytes Oqtane.Server/Scripts/00.00.00.sql | 27 ++++++++ Oqtane.Server/wwwroot/images/checked.png | Bin 0 -> 427 bytes Oqtane.Server/wwwroot/images/null.png | Bin 0 -> 177 bytes Oqtane.Server/wwwroot/images/unchecked.png | Bin 0 -> 438 bytes 9 files changed, 120 insertions(+), 14 deletions(-) create mode 100644 Oqtane.Client/Modules/Controls/TriStateCheckBox.razor create mode 100644 Oqtane.Client/wwwroot/images/checked.png create mode 100644 Oqtane.Client/wwwroot/images/null.png create mode 100644 Oqtane.Client/wwwroot/images/unchecked.png create mode 100644 Oqtane.Server/wwwroot/images/checked.png create mode 100644 Oqtane.Server/wwwroot/images/null.png create mode 100644 Oqtane.Server/wwwroot/images/unchecked.png diff --git a/Oqtane.Client/Modules/Controls/PermissionGrid.razor b/Oqtane.Client/Modules/Controls/PermissionGrid.razor index eed771a4..f1762af4 100644 --- a/Oqtane.Client/Modules/Controls/PermissionGrid.razor +++ b/Oqtane.Client/Modules/Controls/PermissionGrid.razor @@ -28,7 +28,9 @@ @foreach (PermissionString permission in permissions) { var p = permission; - + + + } } @@ -51,12 +53,15 @@ @foreach (User user in users) { + string userid = "[" + user.UserId.ToString() + "]"; @user.DisplayName @foreach (PermissionString permission in permissions) { var p = permission; - + + + } } @@ -125,15 +130,22 @@ } } - private bool GetPermissionValue(string Permissions, string SecurityKey) + private bool? GetPermissionValue(string Permissions, string SecurityKey) { - if ((";" + Permissions + ";").Contains(";" + SecurityKey + ";")) + if ((";" + Permissions + ";").Contains(";" + "!" + SecurityKey + ";")) { - return true; + return false; // deny permission } else { - return false; + if ((";" + Permissions + ";").Contains(";" + SecurityKey + ";")) + { + return true; // grant permission + } + else + { + return null; // not specified + } } } @@ -169,20 +181,27 @@ username = ""; } - private void PermissionChanged(UIChangeEventArgs e, string PermissionName, string SecurityId) + private void PermissionChanged(bool? Value, string PermissionName, string SecurityId) { - bool selected = (bool)e.Value; + bool? selected = Value; PermissionString permission = permissions.Find(item => item.PermissionName == PermissionName); if (permission != null) { List ids = permission.Permissions.Split(';').ToList(); - if (selected) + + ids.Remove(SecurityId); // remove grant permission + ids.Remove("!" + SecurityId); // remove deny permission + + switch (selected) { - ids.Add(SecurityId); - } - else - { - ids.Remove(SecurityId); + case true: + ids.Add(SecurityId); // add grant permission + break; + case false: + ids.Add("!" + SecurityId); // add deny permission + break; + case null: + break; // permission not specified } permissions[permissions.FindIndex(item => item.PermissionName == PermissionName)].Permissions = string.Join(";", ids.ToArray()); } diff --git a/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor b/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor new file mode 100644 index 00000000..9c75e34d --- /dev/null +++ b/Oqtane.Client/Modules/Controls/TriStateCheckBox.razor @@ -0,0 +1,60 @@ + + +@code { + [Parameter] + public bool? Value { get; set; } + + [Parameter] + public bool Disabled { get; set; } + + [Parameter] + public Action OnChange { get; set; } + + bool? value = null; + string title; + string src = ""; + + protected override void OnInitialized() + { + value = Value; + SetImage(); + } + + private void SetValue() + { + switch (value) + { + case true: + value = false; + break; + case false: + value = null; + break; + case null: + value = true; + break; + } + SetImage(); + OnChange(value); + } + + private void SetImage() + { + switch (value) + { + case true: + src = "images/checked.png"; + title = "Permission Granted"; + break; + case false: + src = "images/unchecked.png"; + title = "Permission Denied"; + break; + case null: + src = "images/null.png"; + title = ""; + break; + } + StateHasChanged(); + } +} diff --git a/Oqtane.Client/wwwroot/images/checked.png b/Oqtane.Client/wwwroot/images/checked.png new file mode 100644 index 0000000000000000000000000000000000000000..a4100c70a27c17c9da8ae3001183f6c335a2bdda GIT binary patch literal 427 zcmV;c0aX5pP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^XO*0N*(00A3GL_t(IPh-&ZF--E^pZd%FP~v}5u-A^H zkJ>)QNem#(UZ+z3lY>Ee8NjAtkt7C#^pa$N&*}94-lx*we3A?RY25zm(ErXmv*2PR z88G4g!v9aczxW?^E*~yNv;kRH8vnol_33}%)pitdq6`Q=oBRLq_vim-JY0?;hhad> z`BIcX0%4H9kG?zi-xnBw$l@T3VZfzNH~;T?edK@OnQSn>|K0+i?Jxd^oXvx)LB<#c zM4m7DfA+)G|JOg?{a<@?!v9adzx*%0)`6l48Dkg#!l1Zb`+VpBU;lpppN_@f$QY{u zAPfqJl#A8>ebB-K9pf~BSPVA6?@;!lvI6;>1s;*b z3=BeG%-Ex}lN~51S>hT|5}cn_Ql40p%21G)nOCBhms+A=qGzCIXnEz@rWBweJx>?M z5DWk0AOHW`JJ;6!tuHe0(2p?Q$*`pSN<$#C8}EW?j1E#c9F{-@|9Ke7MVA=K*OvML PbuxIm`njxgN@xNACvh`; literal 0 HcmV?d00001 diff --git a/Oqtane.Client/wwwroot/images/unchecked.png b/Oqtane.Client/wwwroot/images/unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..566e60a8e19044766052c5859586b5bfec830853 GIT binary patch literal 438 zcmV;n0ZIOeP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^XO*0N*(00AaRL_t(IPo0xJYr;SPhVyq?{3oKAh`MKR zS2w>F{YyHCIJtC-v<^a3D3W&YE3sgpO5f%^@n~`vFdd%ZKHleY?-9d%c(k2T>H8(0 zM;4w6g}}whAsCPGF&M}>MZoaI_u=(= za*i;3oXv1rEZ|lua$XS-hR?elylz*F-EtYn=@ci&!CS2s+p852hA;a)ynY|SWO5Bx ztIEDq0b%$j3=ytY+Av8K@UwX`!{^N=wOFk{6n49Fbh0S+aFCt+MG?rh6L%J!P?C5Z zMc|J{;;E8t6Y)CRE!K^OoKpm!!y(+1!pOSS!h5|g$BG~;SAl5;y2X2VjgfVE_OC07*qoM6N<$g1LygEC2ui literal 0 HcmV?d00001 diff --git a/Oqtane.Server/Scripts/00.00.00.sql b/Oqtane.Server/Scripts/00.00.00.sql index b8b8ad32..2f97a61e 100644 --- a/Oqtane.Server/Scripts/00.00.00.sql +++ b/Oqtane.Server/Scripts/00.00.00.sql @@ -179,6 +179,28 @@ CREATE TABLE [dbo].[Setting]( ) GO +CREATE TABLE [dbo].[Profile]( + [ProfileId] [int] IDENTITY(1,1) NOT NULL, + [SiteId] [int] NULL, + [Name] [nvarchar](50) NOT NULL, + [Category] [nvarchar](50) NOT NULL, + [ViewOrder] [int] NOT NULL, + [MaxLength] [int] NOT NULL, + [DefaultValue] [nvarchar](2000) NULL, + [IsRequired] [bit] NOT NULL, + [IsPrivate] [bit] NOT NULL, + [CreatedBy] [nvarchar](256) NOT NULL, + [CreatedOn] [datetime] NOT NULL, + [ModifiedBy] [nvarchar](256) NOT NULL, + [ModifiedOn] [datetime] NOT NULL, + CONSTRAINT [PK_Profile] PRIMARY KEY CLUSTERED + ( + [ProfileId] ASC + ) +) + +GO + CREATE TABLE [dbo].[HtmlText]( [HtmlTextId] [int] IDENTITY(1,1) NOT NULL, [ModuleId] [int] NOT NULL, @@ -259,6 +281,11 @@ ALTER TABLE [dbo].[Permission] WITH CHECK ADD CONSTRAINT [FK_Permission_Role] FO REFERENCES [dbo].[Role] ([RoleId]) GO +ALTER TABLE [dbo].[Profile] WITH NOCHECK ADD CONSTRAINT [FK_Profile_Sites] FOREIGN KEY([SiteId]) +REFERENCES [dbo].[Site] ([SiteId]) +ON DELETE CASCADE +GO + /* Create indexes diff --git a/Oqtane.Server/wwwroot/images/checked.png b/Oqtane.Server/wwwroot/images/checked.png new file mode 100644 index 0000000000000000000000000000000000000000..a4100c70a27c17c9da8ae3001183f6c335a2bdda GIT binary patch literal 427 zcmV;c0aX5pP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^XO*0N*(00A3GL_t(IPh-&ZF--E^pZd%FP~v}5u-A^H zkJ>)QNem#(UZ+z3lY>Ee8NjAtkt7C#^pa$N&*}94-lx*we3A?RY25zm(ErXmv*2PR z88G4g!v9aczxW?^E*~yNv;kRH8vnol_33}%)pitdq6`Q=oBRLq_vim-JY0?;hhad> z`BIcX0%4H9kG?zi-xnBw$l@T3VZfzNH~;T?edK@OnQSn>|K0+i?Jxd^oXvx)LB<#c zM4m7DfA+)G|JOg?{a<@?!v9adzx*%0)`6l48Dkg#!l1Zb`+VpBU;lpppN_@f$QY{u zAPfqJl#A8>ebB-K9pf~BSPVA6?@;!lvI6;>1s;*b z3=BeG%-Ex}lN~51S>hT|5}cn_Ql40p%21G)nOCBhms+A=qGzCIXnEz@rWBweJx>?M z5DWk0AOHW`JJ;6!tuHe0(2p?Q$*`pSN<$#C8}EW?j1E#c9F{-@|9Ke7MVA=K*OvML PbuxIm`njxgN@xNACvh`; literal 0 HcmV?d00001 diff --git a/Oqtane.Server/wwwroot/images/unchecked.png b/Oqtane.Server/wwwroot/images/unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..566e60a8e19044766052c5859586b5bfec830853 GIT binary patch literal 438 zcmV;n0ZIOeP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^XO*0N*(00AaRL_t(IPo0xJYr;SPhVyq?{3oKAh`MKR zS2w>F{YyHCIJtC-v<^a3D3W&YE3sgpO5f%^@n~`vFdd%ZKHleY?-9d%c(k2T>H8(0 zM;4w6g}}whAsCPGF&M}>MZoaI_u=(= za*i;3oXv1rEZ|lua$XS-hR?elylz*F-EtYn=@ci&!CS2s+p852hA;a)ynY|SWO5Bx ztIEDq0b%$j3=ytY+Av8K@UwX`!{^N=wOFk{6n49Fbh0S+aFCt+MG?rh6L%J!P?C5Z zMc|J{;;E8t6Y)CRE!K^OoKpm!!y(+1!pOSS!h5|g$BG~;SAl5;y2X2VjgfVE_OC07*qoM6N<$g1LygEC2ui literal 0 HcmV?d00001