From 349ba066fd1b03c9f0b7c360fbd1c8a053405286 Mon Sep 17 00:00:00 2001 From: kotcheshir73 Date: Sun, 28 Mar 2021 19:58:42 +0400 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=D0=B8=20simplevi?= =?UTF-8?q?ew?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/DatabaseCore/SecurityManager.cs | 7 +---- .../BindingModels/AccessBindingModel.cs | 5 ---- .../BusinessLogics/BusinessLogicCore.cs | 27 +++++++++++++++--- .../Common/ModuleTools/Enums/AccessType.cs | 11 ++----- ...Кафедральный портал.docx | Bin 0 -> 31173 bytes .../ViewModels/AccessViewModels.cs | 24 ++++------------ .../SecurityWindowDesktopExtension.cs | 4 +-- 7 files changed, 35 insertions(+), 43 deletions(-) create mode 100644 DepartmentPortal/Documetations/Кафедральный портал.docx diff --git a/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs b/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs index 083a088..22f9d7a 100644 --- a/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs +++ b/DepartmentPortal/Common/DatabaseCore/SecurityManager.cs @@ -31,11 +31,6 @@ namespace DatabaseCore Access access = null; if (model != null) { - // простой просмотр возможен - if (model.Model.SkipCheck && model.Type == AccessType.SimpleView) - { - return true; - } // если не указан идентификатор пользователя, то смотрим, может он авторизован if (!model.Model.UserId.HasValue && User.HasValue) { @@ -60,7 +55,7 @@ namespace DatabaseCore } switch (model.Type) { - case AccessType.FullView: + case AccessType.View: ErrorMessage = $"Нет доступа на чтение данных по сущности '{model.Entity}'"; return false; case AccessType.Change: diff --git a/DepartmentPortal/Common/ModuleTools/BindingModels/AccessBindingModel.cs b/DepartmentPortal/Common/ModuleTools/BindingModels/AccessBindingModel.cs index 3114ec3..08b62b5 100644 --- a/DepartmentPortal/Common/ModuleTools/BindingModels/AccessBindingModel.cs +++ b/DepartmentPortal/Common/ModuleTools/BindingModels/AccessBindingModel.cs @@ -7,11 +7,6 @@ namespace ModuleTools.BindingModels /// public class AccessBindingModel { - /// - /// Пропускать проверку (работает только для получения данных) - /// - public bool SkipCheck { get; set; } - /// /// Идентификатор пользователя, который запрашивает выполнение операции /// diff --git a/DepartmentPortal/Common/ModuleTools/BusinessLogics/BusinessLogicCore.cs b/DepartmentPortal/Common/ModuleTools/BusinessLogics/BusinessLogicCore.cs index 8e09628..5efde9d 100644 --- a/DepartmentPortal/Common/ModuleTools/BusinessLogics/BusinessLogicCore.cs +++ b/DepartmentPortal/Common/ModuleTools/BusinessLogics/BusinessLogicCore.cs @@ -26,14 +26,31 @@ namespace ModuleTools.BusinessLogics /// public List<(string Title, string Message)> Errors { get; protected set; } + /// + /// Сервис с хранилищем данных + /// protected IEntityService Service { get; set; } + /// + /// Менеджер безопасности + /// protected ISecurityManager Security { get; set; } + /// + /// Тип операции, скоторым работает логика + /// protected readonly AccessOperation _serviceOperation; + /// + /// Название сущности + /// protected readonly string _entity; + /// + /// Возможен ли просмотр без авторизации + /// + protected bool _allowSimpleView = true; + public BusinessLogicCore(IEntityService service, string entity, AccessOperation serviceOperation) { Service = service; @@ -70,9 +87,10 @@ namespace ModuleTools.BusinessLogics Errors.Clear(); try { - if (NoAccess(model, AccessType.SimpleView) && NoAccess(model, AccessType.FullView)) + var fullView = NoAccess(model, AccessType.View); + if (fullView && !_allowSimpleView) { - return null; + throw new MethodAccessException("Нет прав на получение списка"); } var result = Service.Read(model); if (!result.IsSucceeded) @@ -100,9 +118,10 @@ namespace ModuleTools.BusinessLogics Errors.Clear(); try { - if (NoAccess(model, AccessType.SimpleView) && NoAccess(model, AccessType.FullView)) + var fullView = NoAccess(model, AccessType.View); + if (fullView && !_allowSimpleView) { - return null; + throw new MethodAccessException("Нет прав на получение списка"); } var result = Service.Read(model); if (!result.IsSucceeded) diff --git a/DepartmentPortal/Common/ModuleTools/Enums/AccessType.cs b/DepartmentPortal/Common/ModuleTools/Enums/AccessType.cs index acff2c2..035fa90 100644 --- a/DepartmentPortal/Common/ModuleTools/Enums/AccessType.cs +++ b/DepartmentPortal/Common/ModuleTools/Enums/AccessType.cs @@ -5,24 +5,19 @@ /// public enum AccessType : int { - /// - /// Простой просомтр - /// - SimpleView = 1, - /// /// Полный просомтр /// - FullView = 2, + View = 1, /// /// Добавление/Изменение /// - Change = 4, + Change = 2, /// /// Удаление /// - Delete = 8 + Delete = 4 } } \ No newline at end of file diff --git a/DepartmentPortal/Documetations/Кафедральный портал.docx b/DepartmentPortal/Documetations/Кафедральный портал.docx new file mode 100644 index 0000000000000000000000000000000000000000..d6d52232ca2d55f2e0e4677dad95159793a1d086 GIT binary patch literal 31173 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 j{e^~s*|z&z_5UrKWTg AccessType switch { - get - { - switch (AccessType) - { - case AccessType.Delete: - return "Полные права"; - case AccessType.Change: - return "Просмотр, Редактирование"; - case AccessType.FullView: - return "Просмотр"; - case AccessType.SimpleView: - return "Частичный просмотр"; - default: - return "Неопределено"; - } - } - } + AccessType.Delete => "Полные права", + AccessType.Change => "Просмотр, Редактирование", + AccessType.View => "Просмотр", + _ => "Неопределено", + }; public override string ToString() => $"{RoleName}-{AccessOperationTitle}({AccessTypeTitle})"; } diff --git a/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs b/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs index fca70e1..68d488a 100644 --- a/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs +++ b/DepartmentPortal/Security/SecurityWindowsDesktop/SecurityWindowDesktopExtension.cs @@ -22,7 +22,7 @@ namespace SecurityWindowsDesktop } if (!manager.CheckAccess(new SecurityManagerCheckAccessModel(new AccessBindingModel { UserId = manager.User }, - AccessOperation.Администрирование, AccessType.SimpleView, "Администрирование"))) + AccessOperation.Администрирование, AccessType.View, "Администрирование"))) { return null; } @@ -42,7 +42,7 @@ namespace SecurityWindowsDesktop foreach (var cntrl in _controls) { if (manager.CheckAccess(new SecurityManagerCheckAccessModel(new AccessBindingModel { UserId = manager.User }, - cntrl.AccessOperation, AccessType.SimpleView, cntrl.Title))) + cntrl.AccessOperation, AccessType.View, cntrl.Title))) { list.Add(new WindowDesktopExtensionControlModel {