/// <summary>
 /// Constructs a PermissionViewModel from a Permission (for role) object.
 /// </summary>
 /// <param name="permission">Permiso.</param>
 /// <param name="rol">Rol con el que se construye el permiso.</param>
 /// <param name="resourceGroupId">Grupo al que pertenece.</param>
 public PermissionViewModel(Permission permission, RoleInfo rol, Guid resourceGroupId)
 {
     PermissionId = permission?.PermissionId ?? 0;
     ResourceGroupId = resourceGroupId;
     RolId = rol.RoleID;
     RoleName = rol.RoleName;
     ReadPermission = permission != null && permission.ReadPermission;
     WritePermission = permission != null && permission.WritePermission;
     Cd = permission?.Cd ?? DateTime.Now;
     Cu = permission?.Cu ?? Common.CurrentUser.UserID;
     Md = permission?.Md ?? DateTime.Now;
     Mu = permission?.Mu ?? Common.CurrentUser.UserID;
 }
 /// <summary>
 /// Constructs a PermissionViewModel from a Permission (for user) object.
 /// </summary>
 /// <param name="permission">Permiso</param>
 /// <param name="resourceGroupId">Grupo al que pertenece.</param>
 public PermissionViewModel(Permission permission, Guid resourceGroupId)
 {
     PermissionId = permission.PermissionId;
     ResourceGroupId = resourceGroupId;
     UserId = permission.UserId;
     UserDisplayName = permission.UserId.HasValue ? Common.GetUserDisplayName(permission.UserId.Value) : string.Empty;
     ReadPermission = permission.ReadPermission;
     WritePermission = permission.WritePermission;
     Cd = permission.Cd;
     Cu = permission.Cu;
     Md = permission.Md;
     Mu = permission.Mu;
 }
        public HttpResponseMessage SaveUserPermission(UserPermission submitted)
        {
            try
            {
                if (!Common.HasGroupWritePermission(submitted.permission.ResourceGroupId))
                    return Request.CreateResponse(HttpStatusCode.Unauthorized, new { Message = App_GlobalResources.Errors.ErrorNotAuthorized });

                var user = Common.GetUser(submitted.userName);

                if (user == null)
                    return Request.CreateResponse(HttpStatusCode.OK, new { Success = false, Message = App_GlobalResources.Errors.ErrorUserNotFound });

                var userPermissions = _repository.GetUserPermissions(submitted.permission.ResourceGroupId, user.UserID);

                if (userPermissions != null && userPermissions.Any())
                    return Request.CreateResponse(HttpStatusCode.OK, new { Success = false, Message = App_GlobalResources.Errors.ErrorUserAlreadyhasPermission });

                var permission = new Permission
                {
                    ResourceGroupId = submitted.permission.ResourceGroupId,
                    UserId = user.UserID,
                    ReadPermission = submitted.permission.ReadPermission,
                    WritePermission = submitted.permission.WritePermission
                };

                return Request.CreateResponse(HttpStatusCode.OK, new { Success = _repository.Create(permission) });
            }
            catch (Exception)
            {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, App_GlobalResources.Errors.ErrorGeneric);
            }
        }
        public HttpResponseMessage Save(Permission viewModel)
        {
            try
            {
                if (!Common.HasGroupWritePermission(viewModel.ResourceGroupId))
                    return Request.CreateResponse(HttpStatusCode.Unauthorized, new {Message = App_GlobalResources.Errors.ErrorNotAuthorized});

                var permission = viewModel.PermissionId == 0
                    ? _repository.Create(GeneratePermission(viewModel))
                    : _repository.Update(GeneratePermission(viewModel));

                return permission != null
                    ? Request.CreateResponse(HttpStatusCode.OK, new {Success = true, Permission = permission})
                    : Request.CreateResponse(HttpStatusCode.OK, new {Success = false});
            }
            catch (Exception)
            {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, App_GlobalResources.Errors.ErrorGeneric);
            }
        }
 /// <summary>
 /// Create a permit to insert into the database.
 /// </summary>
 /// <param name="viewModel">New permission to insert.</param>
 /// <returns></returns>
 private static Permission GeneratePermission(Permission viewModel)
 {
     return new Permission
     {
         PermissionId = viewModel.PermissionId,
         ResourceGroupId = viewModel.ResourceGroupId,
         UserId = viewModel.UserId,
         RolId = viewModel.RolId,
         ReadPermission = viewModel.ReadPermission,
         WritePermission = viewModel.WritePermission
     };
 }