From 2037b6d173be028af2b62c0d59283346b1e72525 Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Fri, 22 Jun 2018 12:04:55 +0200 Subject: [PATCH] Added user in attachment Check userId before delete attachment New database --- .../Controllers/MaintenancesController.cs | 11 +- ...201806220920193_InitMigration.Designer.cs} | 2 +- ...on.cs => 201806220920193_InitMigration.cs} | 7 +- ...esx => 201806220920193_InitMigration.resx} | 2 +- Step.Database/Migrations/Configuration.cs | 5 +- Step.Database/Step.Database.csproj | 10 +- Step.Model/Constants.cs | 2 + .../DatabaseModels/MaintenanceFileModel.cs | 6 + .../WebApi/MaintenanceController.cs | 117 +++++++++--------- 9 files changed, 90 insertions(+), 72 deletions(-) rename Step.Database/Migrations/{201806191402402_InitMigration.Designer.cs => 201806220920193_InitMigration.Designer.cs} (92%) rename Step.Database/Migrations/{201806191402402_InitMigration.cs => 201806220920193_InitMigration.cs} (96%) rename Step.Database/Migrations/{201806191402402_InitMigration.resx => 201806220920193_InitMigration.resx} (51%) diff --git a/Step.Database/Controllers/MaintenancesController.cs b/Step.Database/Controllers/MaintenancesController.cs index e24a2962..b6fd1965 100644 --- a/Step.Database/Controllers/MaintenancesController.cs +++ b/Step.Database/Controllers/MaintenancesController.cs @@ -4,6 +4,7 @@ using Step.Model.DTOModels.MaintenanceModels; using System; using System.Collections.Generic; using System.Data.Entity; +using System.IO; using System.Linq; using static Step.Config.ServerConfig; using static Step.Model.Constants; @@ -301,15 +302,16 @@ namespace Step.Database.Controllers .FirstOrDefault(); } - public MaintenanceFileModel AddAttachment(string fileName, string localFileName ,int maintenanceId) + public MaintenanceFileModel AddAttachment(string fileName, string localFileName ,int maintenanceId, int userId) { MaintenanceFileModel file = new MaintenanceFileModel() { FileName = fileName, LocalFileName = localFileName, - MaintenanceId = maintenanceId + MaintenanceId = maintenanceId, + UserId = userId }; - + // Add to db dbCtx.MaintenanceFiles.Add(file); dbCtx.SaveChanges(); @@ -333,6 +335,9 @@ namespace Step.Database.Controllers dbCtx.MaintenanceFiles.Remove(attachment); dbCtx.SaveChanges(); + + if (File.Exists(MAINTENANCE_ATTACHMENT_PATH + attachment.LocalFileName)) + File.Delete(MAINTENANCE_ATTACHMENT_PATH + attachment.LocalFileName); } #endregion } diff --git a/Step.Database/Migrations/201806191402402_InitMigration.Designer.cs b/Step.Database/Migrations/201806220920193_InitMigration.Designer.cs similarity index 92% rename from Step.Database/Migrations/201806191402402_InitMigration.Designer.cs rename to Step.Database/Migrations/201806220920193_InitMigration.Designer.cs index 143a5daf..c9143e22 100644 --- a/Step.Database/Migrations/201806191402402_InitMigration.Designer.cs +++ b/Step.Database/Migrations/201806220920193_InitMigration.Designer.cs @@ -13,7 +13,7 @@ namespace Step.Database.Migrations string IMigrationMetadata.Id { - get { return "201806191402402_InitMigration"; } + get { return "201806220920193_InitMigration"; } } string IMigrationMetadata.Source diff --git a/Step.Database/Migrations/201806191402402_InitMigration.cs b/Step.Database/Migrations/201806220920193_InitMigration.cs similarity index 96% rename from Step.Database/Migrations/201806191402402_InitMigration.cs rename to Step.Database/Migrations/201806220920193_InitMigration.cs index 46905423..c01635d2 100644 --- a/Step.Database/Migrations/201806191402402_InitMigration.cs +++ b/Step.Database/Migrations/201806220920193_InitMigration.cs @@ -79,10 +79,13 @@ namespace Step.Database.Migrations file_name = c.String(unicode: false), local_file_name = c.String(unicode: false), maintenance_id = c.Int(nullable: false), + user_id = c.Int(), }) .PrimaryKey(t => t.id) .ForeignKey("dbo.maintenance", t => t.maintenance_id, cascadeDelete: true) - .Index(t => t.maintenance_id); + .ForeignKey("dbo.user", t => t.user_id) + .Index(t => t.maintenance_id) + .Index(t => t.user_id); CreateTable( "dbo.maintenance", @@ -153,6 +156,7 @@ namespace Step.Database.Migrations DropForeignKey("dbo.performed_maintenance", "maintenance", "dbo.maintenance"); DropForeignKey("dbo.maintenance_note", "user_id", "dbo.user"); DropForeignKey("dbo.maintenance_note", "maintenance_id", "dbo.maintenance"); + DropForeignKey("dbo.maintenance_file", "user_id", "dbo.user"); DropForeignKey("dbo.maintenance_file", "maintenance_id", "dbo.maintenance"); DropForeignKey("dbo.maintenance", "user_id", "dbo.user"); DropForeignKey("dbo.machine_user", "user_id", "dbo.user"); @@ -163,6 +167,7 @@ namespace Step.Database.Migrations DropIndex("dbo.maintenance_note", new[] { "maintenance_id" }); DropIndex("dbo.maintenance_note", new[] { "user_id" }); DropIndex("dbo.maintenance", new[] { "user_id" }); + DropIndex("dbo.maintenance_file", new[] { "user_id" }); DropIndex("dbo.maintenance_file", new[] { "maintenance_id" }); DropIndex("dbo.machine_user", new[] { "role_id" }); DropIndex("dbo.machine_user", "unique_machine_user"); diff --git a/Step.Database/Migrations/201806191402402_InitMigration.resx b/Step.Database/Migrations/201806220920193_InitMigration.resx similarity index 51% rename from Step.Database/Migrations/201806191402402_InitMigration.resx rename to Step.Database/Migrations/201806220920193_InitMigration.resx index 758334fd..7e3fbe82 100644 --- a/Step.Database/Migrations/201806191402402_InitMigration.resx +++ b/Step.Database/Migrations/201806220920193_InitMigration.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 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 dbo diff --git a/Step.Database/Migrations/Configuration.cs b/Step.Database/Migrations/Configuration.cs index 6102b87a..2ce0f55d 100644 --- a/Step.Database/Migrations/Configuration.cs +++ b/Step.Database/Migrations/Configuration.cs @@ -37,7 +37,10 @@ namespace Step.Database.Migrations new FunctionAccessModel() { Name = NC_SOFTKEY, Area = UNDER_HOOD, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 4 }, new FunctionAccessModel() { Name = USER_SOFTKEY, Area = UNDER_HOOD, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 5 }, new FunctionAccessModel() { Name = HEADS_CMD, Area = UNDER_HOOD, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 6 }, - new FunctionAccessModel() { Name = AXES_CMD, Area = UNDER_HOOD, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 7 } + new FunctionAccessModel() { Name = AXES_CMD, Area = UNDER_HOOD, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 7 }, + + new FunctionAccessModel() { Name = TOOL_MANAGER, Area = TOOLING_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 8 }, + new FunctionAccessModel() { Name = MAINTENANCE, Area = MAINTENANCE_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 9 } ); context.SaveChanges(); diff --git a/Step.Database/Step.Database.csproj b/Step.Database/Step.Database.csproj index acc8a298..41eaceba 100644 --- a/Step.Database/Step.Database.csproj +++ b/Step.Database/Step.Database.csproj @@ -77,9 +77,9 @@ - - - 201806191402402_InitMigration.cs + + + 201806220920193_InitMigration.cs @@ -115,8 +115,8 @@ - - 201806191402402_InitMigration.cs + + 201806220920193_InitMigration.cs diff --git a/Step.Model/Constants.cs b/Step.Model/Constants.cs index 59ba192d..53218bf7 100644 --- a/Step.Model/Constants.cs +++ b/Step.Model/Constants.cs @@ -170,6 +170,8 @@ namespace Step.Model public const string USER_SOFTKEY = "userSoftkeys"; public const string HEADS_CMD = "headsCmd"; public const string AXES_CMD = "axesCmd"; + public const string TOOL_MANAGER = "toolManager"; + public const string MAINTENANCE = "maintenance"; } } } diff --git a/Step.Model/DatabaseModels/MaintenanceFileModel.cs b/Step.Model/DatabaseModels/MaintenanceFileModel.cs index 3d0e8bcb..595fd663 100644 --- a/Step.Model/DatabaseModels/MaintenanceFileModel.cs +++ b/Step.Model/DatabaseModels/MaintenanceFileModel.cs @@ -26,5 +26,11 @@ namespace Step.Model.DatabaseModels [ForeignKey("MaintenanceId")] public MaintenanceModel Maintenance { get; set; } + + [Column("user_id")] + public int? UserId { get; set; } + + [ForeignKey("UserId")] + public UserModel User { get; set; } } } diff --git a/Step/Controllers/WebApi/MaintenanceController.cs b/Step/Controllers/WebApi/MaintenanceController.cs index 36ff269a..3c3074cb 100644 --- a/Step/Controllers/WebApi/MaintenanceController.cs +++ b/Step/Controllers/WebApi/MaintenanceController.cs @@ -26,14 +26,12 @@ namespace Step.Controllers.WebApi public class MaintenanceController : ApiController { [Route("maintenances"), HttpGet] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.READ)] public IHttpActionResult GetMaintenances() { var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (NcHandler ncHandler = new NcHandler()) { @@ -48,7 +46,7 @@ namespace Step.Controllers.WebApi } [Route("maintenance"), HttpPost] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] public IHttpActionResult AddMaintenance([Required]DTONewMaintenanceModel newMaint) { if (!ModelState.IsValid) @@ -57,8 +55,6 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (MaintenancesController maintenancesController = new MaintenancesController()) { @@ -77,7 +73,7 @@ namespace Step.Controllers.WebApi } [Route("maintenance/{maintenanceId:int}"), HttpPut] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] public IHttpActionResult EditMaintenance(int maintenanceId, [Required]DTOUpdateMaintenanceModel newMaint) { if (!ModelState.IsValid) @@ -86,8 +82,6 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (MaintenancesController maintenancesController = new MaintenancesController()) { @@ -123,7 +117,7 @@ namespace Step.Controllers.WebApi } [Route("maintenance/{maintenanceId:int}"), HttpDelete] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] public IHttpActionResult DeleteMaintenance(int maintenanceId) { if (!ModelState.IsValid) @@ -132,8 +126,6 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (MaintenancesController maintenancesController = new MaintenancesController()) { @@ -160,7 +152,7 @@ namespace Step.Controllers.WebApi } [Route("maintenance/{maintenanceId:int}/note"), HttpGet] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.READ)] public IHttpActionResult GetMaintenanceNotes(int maintenanceId) { if (!ModelState.IsValid) @@ -190,8 +182,6 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (MaintenancesController maintenancesController = new MaintenancesController()) { @@ -208,7 +198,7 @@ namespace Step.Controllers.WebApi } [Route("maintenance/{maintenanceId:int}/note/{noteId:int}"), HttpPut] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] public IHttpActionResult EditMaintenanceNote(int noteId, DTONewMaintenanceNoteModel newNote) { if (!ModelState.IsValid) @@ -217,8 +207,6 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (MaintenancesController maintenancesController = new MaintenancesController()) { @@ -239,7 +227,7 @@ namespace Step.Controllers.WebApi } [Route("maintenance/{maintenanceId:int}/note/{noteId:int}"), HttpDelete] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] public IHttpActionResult DeleteMaintenanceNote(int noteId) { if (!ModelState.IsValid) @@ -248,8 +236,6 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); using (MaintenancesController maintenancesController = new MaintenancesController()) { @@ -272,7 +258,7 @@ namespace Step.Controllers.WebApi [Route("maintenance/{maintenanceId:int}/performe"), HttpPost] - [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] public IHttpActionResult PerformeMaintenance(int maintenanceId) { if (!ModelState.IsValid) @@ -281,9 +267,7 @@ namespace Step.Controllers.WebApi var identity = User.Identity as ClaimsIdentity; // Find user id from the bearer token var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); - if (userId == null) - return Unauthorized(); - + // Update data using (NcHandler ncHandler = new NcHandler()) { @@ -307,39 +291,9 @@ namespace Step.Controllers.WebApi } } - [Route("maintenance/{maintenanceId:int}/attachment"), HttpPost] - public async Task AddAttachment(int maintenanceId) - { - // Check whether the POST operation is MultiPart? - if (!Request.Content.IsMimeMultipartContent()) - throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); - - // Create CustomMultipartFormDataStreamProvider - CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(MAINTENANCE_ATTACHMENT_PATH); - // MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(MAINTENANCE_ATTACHMENT_PATH); - List files = new List(); - - // Read all contents of multipart message into CustomMultipartFormDataStreamProvider. - var result = await Request.Content.ReadAsMultipartAsync(provider); - - MaintenanceFileModel attachment = null; - using (MaintenancesController maintenancesController = new MaintenancesController()) - { - // Remove foreach - foreach (MultipartFileData file in provider.FileData) - { - var fileName = Path.GetFileName(file.LocalFileName); - - files.Add(fileName); - attachment = maintenancesController.AddAttachment(file.Headers.ContentDisposition.FileName.Replace("\"", string.Empty), fileName, maintenanceId); - } - } - - // Send OK Response along with saved file names to the client. - return Ok(attachment); - } - [Route("maintenance/{maintenanceId:int}/attachments"), HttpGet] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.READ)] + public IHttpActionResult GetAttachments(int maintenanceId) { using (MaintenancesController maintenancesController = new MaintenancesController()) @@ -365,9 +319,52 @@ namespace Step.Controllers.WebApi } } + [Route("maintenance/{maintenanceId:int}/attachment"), HttpPost] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] + public async Task AddAttachment(int maintenanceId) + { + var identity = User.Identity as ClaimsIdentity; + // Find user id from the bearer token + var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); + + // Check whether the POST operation is MultiPart? + if (!Request.Content.IsMimeMultipartContent()) + throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); + + // Create CustomMultipartFormDataStreamProvider + CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(MAINTENANCE_ATTACHMENT_PATH); + // MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(MAINTENANCE_ATTACHMENT_PATH); + List files = new List(); + + // Read all contents of multipart message into CustomMultipartFormDataStreamProvider. + var result = await Request.Content.ReadAsMultipartAsync(provider); + + MaintenanceFileModel attachment = null; + using (MaintenancesController maintenancesController = new MaintenancesController()) + { + // Remove foreach + foreach (MultipartFileData file in provider.FileData) + { + var fileName = Path.GetFileName(file.LocalFileName); + + files.Add(fileName); + attachment = maintenancesController.AddAttachment(file.Headers.ContentDisposition.FileName.Replace("\"", string.Empty), fileName, maintenanceId, Convert.ToInt32(userId.Value)); + } + } + + // Send OK Response along with saved file names to the client. + return Ok(attachment); + } + [Route("attachment/{attachmentId:int}"), HttpDelete] + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.MAINTENANCE, Action = ACTIONS.WRITE)] + public IHttpActionResult DeleteAttachment(int attachmentId) { + var identity = User.Identity as ClaimsIdentity; + // Find user id from the bearer token + var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); + using (MaintenancesController maintenancesController = new MaintenancesController()) { // Get single file @@ -375,12 +372,12 @@ namespace Step.Controllers.WebApi // Check if exist in db or physically if (attachment == null) return NotFound(); + // Check user + if (attachment.UserId != Convert.ToInt32(userId.Value)) + return Unauthorized(); maintenancesController.DeleteAttachment(attachment); - if (File.Exists(MAINTENANCE_ATTACHMENT_PATH + attachment.LocalFileName)) - File.Delete(MAINTENANCE_ATTACHMENT_PATH + attachment.LocalFileName); - return Ok(); } }