aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-05-07 21:26:06 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-05-07 21:26:06 +0300
commit98c2921a8cf655da3962edafe91bbccc89632e6d (patch)
tree95419d7651d8bcb8e3b2a58af884231c0e91cb0f /Software/Visual_Studio
parent070db71577b05f72e7531d0e530a4ef5bd1d128a (diff)
downloadTango-98c2921a8cf655da3962edafe91bbccc89632e6d.tar.gz
Tango-98c2921a8cf655da3962edafe91bbccc89632e6d.zip
Roles & Permissions !
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/MainViewVM.cs22
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs5
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.BL/AuthorizationException.cs21
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedTestProjectsService.cs6
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.BL/Tango.FSE.BL.csproj1
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/AuthorizationHelper.cs172
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/BlockingMode.cs15
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/FSEViewModel.cs46
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj2
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs150
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs48
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx4
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram162
13 files changed, 519 insertions, 135 deletions
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/MainViewVM.cs
index ef22d0bdc..49345e413 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/MainViewVM.cs
@@ -4,6 +4,7 @@ using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Tango.BL.Enumerations;
using Tango.FSE.Common;
using Tango.FSE.Common.Navigation;
using Tango.FSE.Stubs.Views;
@@ -29,16 +30,19 @@ namespace Tango.FSE.Stubs.ViewModels
Image = ResourceHelper.GetImageFromResources("Images/test_runner.png"),
});
- NavigationManager.MenuItems.Add(new NavigationMenuItem(() =>
- {
- NavigationManager.NavigateTo<StubsModule>(nameof(TestDesignerView));
- })
+ if (AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RunTestDesigner))
{
- Name = "Test Designer",
- Index = 7,
- Description = "Create and test new test runner projects.",
- Image = ResourceHelper.GetImageFromResources("Images/test_designer.png"),
- });
+ NavigationManager.MenuItems.Add(new NavigationMenuItem(() =>
+ {
+ NavigationManager.NavigateTo<StubsModule>(nameof(TestDesignerView));
+ })
+ {
+ Name = "Test Designer",
+ Index = 7,
+ Description = "Create and test new test runner projects.",
+ Image = ResourceHelper.GetImageFromResources("Images/test_designer.png"),
+ });
+ }
});
}
}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs
index 3a64437c6..8eb71490c 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/TestDesignerViewVM.cs
@@ -13,6 +13,7 @@ using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;
using Tango.BL.Entities;
+using Tango.BL.Enumerations;
using Tango.Core;
using Tango.Core.Commands;
using Tango.Core.ExtensionMethods;
@@ -218,10 +219,10 @@ namespace Tango.FSE.Stubs.ViewModels
AddLibraryCommand = new RelayCommand(AddNewLibrary);
ClearOutputCommand = new RelayCommand(Clear);
DeleteLibraryCommand = new RelayCommand<Script>(DeleteLibrary);
- PublishProjectCommand = new RelayCommand(PublishProject);
+ PublishProjectCommand = new RelayCommand(PublishProject,() => CurrentUser.HasPermission(Permissions.FSE_PublishTestProjects));
LoadPublishedProjectCommand = new RelayCommand(LoadPublishedProject);
UnPublishProjectCommand = new RelayCommand(UnPublishProject);
- TogglePublishPanelCommand = new RelayCommand(() => IsPublishPanelOpened = !IsPublishPanelOpened);
+ TogglePublishPanelCommand = new RelayCommand(() => IsPublishPanelOpened = !IsPublishPanelOpened, () => CurrentUser.HasPermission(Permissions.FSE_PublishTestProjects));
RenameLibraryCommand = new RelayCommand<Script>(RenameLibrary);
CreateItemCommand = new RelayCommand<CreateItem>(AutoCreateItem);
DisplayResultGridCommand = new RelayCommand<Result>(DisplayResultGrid);
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/AuthorizationException.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/AuthorizationException.cs
new file mode 100644
index 000000000..301c2482b
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/AuthorizationException.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.FSE.BL
+{
+ public class AuthorizationException : Exception
+ {
+ public AuthorizationException() : base("Insufficient privileges to perform the specified action.")
+ {
+
+ }
+
+ public AuthorizationException(String message) : base(message)
+ {
+
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedTestProjectsService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedTestProjectsService.cs
index a8b5d9f0b..1f8476480 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedTestProjectsService.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedTestProjectsService.cs
@@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
+using Tango.BL.Enumerations;
using Tango.FSE.BL.CacheEntities;
using Z.EntityFramework.Plus;
@@ -106,6 +107,11 @@ namespace Tango.FSE.BL.Services
{
return Task.Factory.StartNew<PublishedTestProject>(() =>
{
+ if (!CurrentUser.HasPermission(Permissions.FSE_PublishTestProjects))
+ {
+ throw new AuthorizationException();
+ }
+
if (!ConnectivityProvider.CheckOnline())
{
throw new InternetConnectionException();
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Tango.FSE.BL.csproj b/Software/Visual_Studio/FSE/Tango.FSE.BL/Tango.FSE.BL.csproj
index 98addeeaa..e548b03db 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Tango.FSE.BL.csproj
+++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Tango.FSE.BL.csproj
@@ -80,6 +80,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
+ <Compile Include="AuthorizationException.cs" />
<Compile Include="CacheEntities\CachedEventType.cs" />
<Compile Include="CacheEntities\CachedPublishedTestProject.cs" />
<Compile Include="EntityRepositoryBase.cs" />
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/AuthorizationHelper.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/AuthorizationHelper.cs
new file mode 100644
index 000000000..7ef470ad1
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/AuthorizationHelper.cs
@@ -0,0 +1,172 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using Tango.BL.Enumerations;
+using Tango.Core.DI;
+using Tango.FSE.Common.Authentication;
+
+namespace Tango.FSE.Common.Authorization
+{
+ public static class AuthorizationHelper
+ {
+ private static IAuthenticationProvider _authenticationProvider;
+ private static List<FrameworkElement> _elements;
+ private static bool _initialized;
+
+ static AuthorizationHelper()
+ {
+ _elements = new List<FrameworkElement>();
+ }
+
+ #region Mode
+
+ /// <summary>
+ /// Determined the resolution mode for the trigger.
+ /// </summary>
+ public static readonly DependencyProperty ModeProperty =
+ DependencyProperty.RegisterAttached("Mode",
+ typeof(BlockingMode?), typeof(AuthorizationHelper),
+ new FrameworkPropertyMetadata(null, Invalidate));
+
+ /// <summary>
+ /// Sets the Mode attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="value">if set to <c>true</c> [value].</param>
+ public static void SetMode(FrameworkElement element, BlockingMode? value)
+ {
+ element.SetValue(ModeProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the Mode attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <returns></returns>
+ public static BlockingMode? GetMode(FrameworkElement element)
+ {
+ return (BlockingMode?)element.GetValue(ModeProperty);
+ }
+
+ #endregion
+
+ #region Permission
+
+ /// <summary>
+ /// Determined the resolution Permission for the trigger.
+ /// </summary>
+ public static readonly DependencyProperty PermissionProperty =
+ DependencyProperty.RegisterAttached("Permission",
+ typeof(Permissions?), typeof(AuthorizationHelper),
+ new FrameworkPropertyMetadata(null, Invalidate));
+
+ /// <summary>
+ /// Sets the Permission attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="value">if set to <c>true</c> [value].</param>
+ public static void SetPermission(FrameworkElement element, Permissions? value)
+ {
+ element.SetValue(PermissionProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the Permission attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <returns></returns>
+ public static Permissions? GetPermission(FrameworkElement element)
+ {
+ return (Permissions?)element.GetValue(PermissionProperty);
+ }
+
+ #endregion
+
+ private static void Invalidate(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ FrameworkElement element = d as FrameworkElement;
+
+ if (element != null)
+ {
+ if (!_initialized)
+ {
+ _initialized = true;
+
+ TangoIOC.Default.GetInstanceWhenAvailable<IAuthenticationProvider>((x) =>
+ {
+ _authenticationProvider = x;
+ _authenticationProvider.CurrentUserChanged += _authenticationProvider_CurrentUserChanged;
+ });
+ }
+
+ Invalidate(element);
+ }
+ }
+
+ private static void Invalidate(FrameworkElement element)
+ {
+ if (!_elements.Contains(element))
+ {
+ _elements.Add(element);
+ element.Unloaded += Element_Unloaded;
+ }
+
+ var currentUser = _authenticationProvider.CurrentUser;
+ var permission = GetPermission(element);
+ var mode = GetMode(element);
+
+ if (currentUser != null && permission != null && mode != null)
+ {
+ bool hasPermission = currentUser.HasPermission(permission.Value);
+
+ if (!hasPermission)
+ {
+ if (mode == BlockingMode.Collapsed)
+ {
+ element.Visibility = Visibility.Collapsed;
+ }
+ else if (mode == BlockingMode.Hidden)
+ {
+ element.Visibility = Visibility.Hidden;
+ }
+ else if (mode == BlockingMode.Disabled)
+ {
+ element.IsEnabled = false;
+ }
+ }
+ else
+ {
+ if (mode == BlockingMode.Collapsed || mode == BlockingMode.Hidden)
+ {
+ element.Visibility = Visibility.Visible;
+ }
+ else if (mode == BlockingMode.Disabled)
+ {
+ element.IsEnabled = true;
+ }
+ }
+ }
+ }
+
+ private static void Element_Unloaded(object sender, RoutedEventArgs e)
+ {
+ FrameworkElement element = sender as FrameworkElement;
+
+ if (element != null)
+ {
+ element.Unloaded -= Element_Unloaded;
+ }
+ }
+
+ private static void _authenticationProvider_CurrentUserChanged(object sender, Tango.BL.Entities.User e)
+ {
+ foreach (var element in _elements.ToList())
+ {
+ Invalidate(element);
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/BlockingMode.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/BlockingMode.cs
new file mode 100644
index 000000000..b128a75b3
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Authorization/BlockingMode.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.FSE.Common.Authorization
+{
+ public enum BlockingMode
+ {
+ Disabled,
+ Hidden,
+ Collapsed
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FSEViewModel.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FSEViewModel.cs
index dbded7041..c4b27e530 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.Common/FSEViewModel.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FSEViewModel.cs
@@ -64,11 +64,25 @@ namespace Tango.FSE.Common
[TangoInject]
public IFSEApplicationManager ApplicationManager { get; set; }
+ private IAuthenticationProvider _authenticationProvider;
/// <summary>
/// Gets or sets the authentication provider.
/// </summary>
[TangoInject]
- public IAuthenticationProvider AuthenticationProvider { get; set; }
+ public IAuthenticationProvider AuthenticationProvider
+ {
+ get { return _authenticationProvider; }
+ set
+ {
+ _authenticationProvider = value;
+ RaisePropertyChangedAuto();
+ if (_authenticationProvider != null)
+ {
+ _authenticationProvider.CurrentUserChanged += OnCurrentUserChanged;
+ }
+ }
+ }
+
/// <summary>
/// Gets or sets the navigation manager.
@@ -219,6 +233,15 @@ namespace Tango.FSE.Common
private set { _settings = value; }
}
+ /// <summary>
+ /// Gets the current user.
+ /// </summary>
+ public User CurrentUser
+ {
+ get { return AuthenticationProvider.CurrentUser; }
+ }
+
+
private bool _isVisible;
/// <summary>
/// Gets or sets a value indicating whether this <see cref="FSEViewModel"/> view is visible.
@@ -381,8 +404,17 @@ namespace Tango.FSE.Common
protected override void RaisePropertyChangedAuto([CallerMemberName] string caller = null)
{
base.RaisePropertyChangedAuto(caller);
+ }
+
+ /// <summary>
+ /// Raises the property changed event.
+ /// </summary>
+ /// <param name="propName">Name of the property.</param>
+ protected override void RaisePropertyChanged(string propName)
+ {
+ base.RaisePropertyChanged(propName);
- if (caller == nameof(IsFree))
+ if (propName == nameof(IsFree))
{
if (IsFree)
{
@@ -394,6 +426,16 @@ namespace Tango.FSE.Common
}
}
}
+
+ /// <summary>
+ /// Called on <see cref="IAuthenticationProvider.CurrentUserChanged"/>.
+ /// </summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="user">The user.</param>
+ protected virtual void OnCurrentUserChanged(object sender, User user)
+ {
+ InvalidateRelayCommands();
+ }
}
/// <summary>
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj b/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj
index 0d89c64ba..6a6970209 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Tango.FSE.Common.csproj
@@ -99,6 +99,8 @@
<ItemGroup>
<Compile Include="Authentication\AuthenticationResult.cs" />
<Compile Include="Authentication\IAuthenticationProvider.cs" />
+ <Compile Include="Authorization\AuthorizationHelper.cs" />
+ <Compile Include="Authorization\BlockingMode.cs" />
<Compile Include="AutoComplete\AutoCompleteSource.cs" />
<Compile Include="Behaviors\CircularProgressBarBehavior.cs" />
<Compile Include="Behaviors\StyleBehavior.cs" />
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs b/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs
index 75323af4a..ae77dbbbf 100644
--- a/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs
@@ -20,10 +20,16 @@ namespace Tango.BL.Enumerations
{
/// <summary>
- /// (Allows loading the Users & Roles module in machine studio)
+ /// (Allows loading the tech board module in Machine Studio)
/// </summary>
- [Description("Allows loading the Users & Roles module in machine studio")]
- RunUsersAndRolesModule = 10,
+ [Description("Allows loading the tech board module in Machine Studio")]
+ RunTechBoardModule = 0,
+
+ /// <summary>
+ /// (Allows loading the research module in Machine Studio)
+ /// </summary>
+ [Description("Allows loading the research module in Machine Studio")]
+ RunResearchModule = 1,
/// <summary>
/// (Allows loading the database module in Machine Studio)
@@ -32,16 +38,22 @@ namespace Tango.BL.Enumerations
RunDataBaseModule = 2,
/// <summary>
+ /// (Allows loading the synchronization module in machine studio)
+ /// </summary>
+ [Description("Allows loading the synchronization module in machine studio")]
+ RunSynchronizationModule = 3,
+
+ /// <summary>
/// (Allows loading the machine designer module in Machine Studio)
/// </summary>
[Description("Allows loading the machine designer module in Machine Studio")]
RunMachineDesignerModule = 4,
/// <summary>
- /// (Allows loading the ColorLab module in Machine Studio)
+ /// (Allows loading the data capture module in Machine Studio)
/// </summary>
- [Description("Allows loading the ColorLab module in Machine Studio")]
- RunColorLabModule = 9,
+ [Description("Allows loading the data capture module in Machine Studio")]
+ RunDataCaptureModule = 5,
/// <summary>
/// (Allows the execution of Machine Studio)
@@ -62,40 +74,34 @@ namespace Tango.BL.Enumerations
RunStubsModule = 8,
/// <summary>
- /// (Allows running the PPC software.)
- /// </summary>
- [Description("Allows running the PPC software.")]
- RunPPC = 15,
-
- /// <summary>
- /// (Allows loading the tech board module in Machine Studio)
+ /// (Allows loading the ColorLab module in Machine Studio)
/// </summary>
- [Description("Allows loading the tech board module in Machine Studio")]
- RunTechBoardModule = 0,
+ [Description("Allows loading the ColorLab module in Machine Studio")]
+ RunColorLabModule = 9,
/// <summary>
- /// (Allows loading the research module in Machine Studio)
+ /// (Allows loading the Users & Roles module in machine studio)
/// </summary>
- [Description("Allows loading the research module in Machine Studio")]
- RunResearchModule = 1,
+ [Description("Allows loading the Users & Roles module in machine studio")]
+ RunUsersAndRolesModule = 10,
/// <summary>
- /// (Allows loading the synchronization module in machine studio)
+ /// (Allows openning the machine studio developer console)
/// </summary>
- [Description("Allows loading the synchronization module in machine studio")]
- RunSynchronizationModule = 3,
+ [Description("Allows openning the machine studio developer console")]
+ RunDeveloperConsole = 11,
/// <summary>
- /// (Allows loading the data capture module in Machine Studio)
+ /// (Allows loading the RML module in Machine Studio)
/// </summary>
- [Description("Allows loading the data capture module in Machine Studio")]
- RunDataCaptureModule = 5,
+ [Description("Allows loading the RML module in Machine Studio")]
+ RunRMLModule = 14,
/// <summary>
- /// (Allows openning the machine studio developer console)
+ /// (Allows running the PPC software.)
/// </summary>
- [Description("Allows openning the machine studio developer console")]
- RunDeveloperConsole = 11,
+ [Description("Allows running the PPC software.")]
+ RunPPC = 15,
/// <summary>
/// (Allows running the statistics module in Machine Studio.)
@@ -104,12 +110,6 @@ namespace Tango.BL.Enumerations
RunStatisticsModule = 16,
/// <summary>
- /// (Allows loading the RML module in Machine Studio)
- /// </summary>
- [Description("Allows loading the RML module in Machine Studio")]
- RunRMLModule = 14,
-
- /// <summary>
/// (Allows running the logging module in Machine Studio.)
/// </summary>
[Description("Allows running the logging module in Machine Studio.")]
@@ -128,6 +128,12 @@ namespace Tango.BL.Enumerations
RunHardwareVersionsModule = 19,
/// <summary>
+ /// (Allows publishing of new PPC application versions.)
+ /// </summary>
+ [Description("Allows publishing of new PPC application versions.")]
+ PublishPPCVersions = 23,
+
+ /// <summary>
/// (Allows running the ColorCapture module in Machine Studio)
/// </summary>
[Description("Allows running the ColorCapture module in Machine Studio")]
@@ -146,10 +152,82 @@ namespace Tango.BL.Enumerations
FSE_RunFSE = 1000,
/// <summary>
- /// (Allows publishing of new PPC application versions.)
+ /// (Allows connecting to machines from all organizations)
/// </summary>
- [Description("Allows publishing of new PPC application versions.")]
- PublishPPCVersions = 23,
+ [Description("Allows connecting to machines from all organizations")]
+ FSE_ConnectAnyMachine = 1001,
+
+ /// <summary>
+ /// (Allows the management of the organization users)
+ /// </summary>
+ [Description("Allows the management of the organization users")]
+ FSE_ManageOrganizationUsersAndRoles = 1002,
+
+ /// <summary>
+ /// (Allows the management of all organizations users)
+ /// </summary>
+ [Description("Allows the management of all organizations users")]
+ FSE_ManageAllOrganizationsUsersAndRoles = 1003,
+
+ /// <summary>
+ /// (Allows running the test designer module)
+ /// </summary>
+ [Description("Allows running the test designer module")]
+ FSE_RunTestDesigner = 1004,
+
+ /// <summary>
+ /// (Allows publishing test projects)
+ /// </summary>
+ [Description("Allows publishing test projects")]
+ FSE_PublishTestProjects = 1005,
+
+ /// <summary>
+ /// (Allows starting remote desktop sessions)
+ /// </summary>
+ [Description("Allows starting remote desktop sessions")]
+ FSE_RemoteDesktopView = 1006,
+
+ /// <summary>
+ /// (Allows remote desktop session mouse/keyboard control and extra actions)
+ /// </summary>
+ [Description("Allows remote desktop session mouse/keyboard control and extra actions")]
+ FSE_RemoteDesktopControl = 1007,
+
+ /// <summary>
+ /// (Allows read access to the PPC file system)
+ /// </summary>
+ [Description("Allows read access to the PPC file system")]
+ FSE_PPCFileSystemRead = 1008,
+
+ /// <summary>
+ /// (Allows write access to the PPC file system)
+ /// </summary>
+ [Description("Allows write access to the PPC file system")]
+ FSE_PPCFileSystemWrite = 1009,
+
+ /// <summary>
+ /// (Allows read access to the firmware file system)
+ /// </summary>
+ [Description("Allows read access to the firmware file system")]
+ FSE_FirmwareFileSystemRead = 1010,
+
+ /// <summary>
+ /// (Allows write access to the firmware file system)
+ /// </summary>
+ [Description("Allows write access to the firmware file system")]
+ FSE_FirmwareFileSystemWrite = 1011,
+
+ /// <summary>
+ /// (Allows generating tup/tfp packages)
+ /// </summary>
+ [Description("Allows generating tup/tfp packages")]
+ FSE_RemoteUpgradeOffline = 1012,
+
+ /// <summary>
+ /// (Allows performing direct remote upgrade)
+ /// </summary>
+ [Description("Allows performing direct remote upgrade")]
+ FSE_RemoteUpgradeOnline = 1013,
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs b/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs
index 3c53bcc87..02e9d41a8 100644
--- a/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/Roles.cs
@@ -104,10 +104,52 @@ namespace Tango.BL.Enumerations
PPCPublisher = 13,
/// <summary>
- /// (Basic FSE Permissions)
+ /// (Technician)
/// </summary>
- [Description("Basic FSE Permissions")]
- FSE_User = 1000,
+ [Description("Technician")]
+ FSETechnician = 1000,
+
+ /// <summary>
+ /// (Advanced Technician)
+ /// </summary>
+ [Description("Advanced Technician")]
+ FSEAdvancedTechnician = 1001,
+
+ /// <summary>
+ /// (Administrator)
+ /// </summary>
+ [Description("Administrator")]
+ FSEAdministrator = 1002,
+
+ /// <summary>
+ /// (Twine Technician)
+ /// </summary>
+ [Description("Twine Technician")]
+ FSETwineTechnician = 1003,
+
+ /// <summary>
+ /// (Twine Administrator)
+ /// </summary>
+ [Description("Twine Administrator")]
+ FSETwineAdministrator = 1004,
+
+ /// <summary>
+ /// (Twine Developer)
+ /// </summary>
+ [Description("Twine Developer")]
+ FSETwineDeveloper = 1005,
+
+ /// <summary>
+ /// (Twine Test Designer)
+ /// </summary>
+ [Description("Twine Test Designer")]
+ FSETwineTestDesigner = 1006,
+
+ /// <summary>
+ /// (Twine Test Publisher)
+ /// </summary>
+ [Description("Twine Test Publisher")]
+ FSETwineTestPublisher = 1007,
}
}
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
index ca3df9082..46fc13b0f 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
@@ -860,7 +860,7 @@
<Property Name="GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="LAST_UPDATED" Type="datetime2" Precision="3" Nullable="false" />
<Property Name="CODE" Type="int" Nullable="false" />
- <Property Name="NAME" Type="nvarchar" MaxLength="40" Nullable="false" />
+ <Property Name="NAME" Type="nvarchar" MaxLength="60" Nullable="false" />
<Property Name="DESCRIPTION" Type="nvarchar" MaxLength="100" Nullable="false" />
</EntityType>
<EntityType Name="PROCESS_PARAMETERS_TABLES">
@@ -4285,7 +4285,7 @@
<Property Name="GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="LAST_UPDATED" Type="DateTime" Nullable="false" Precision="3" />
<Property Name="CODE" Type="Int32" Nullable="false" />
- <Property Name="NAME" Type="String" Nullable="false" MaxLength="40" FixedLength="false" Unicode="true" />
+ <Property Name="NAME" Type="String" Nullable="false" MaxLength="60" FixedLength="false" Unicode="true" />
<Property Name="DESCRIPTION" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="true" />
<NavigationProperty Name="ROLES_PERMISSIONS" Relationship="RemoteModel.FK_ROLES_PERMISSIONS_PERMISSIONS" FromRole="PERMISSION" ToRole="ROLES_PERMISSIONS" />
</EntityType>
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
index fa97977f8..767fc9d32 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
@@ -5,88 +5,88 @@
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="f9ae01d708754bbd997add25a4bacc79" Name="Diagram1" ZoomLevel="97">
- <EntityTypeShape EntityType="RemoteModel.ACTION_LOGS" Width="1.5" PointX="11.25" PointY="42.5" />
- <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="1.5" PointY="4.625" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="1.5" PointY="65.375" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="62.375" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="1.5" PointY="59.5" />
- <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="15.75" PointY="17" />
- <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="6" PointY="33.125" />
- <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="8.25" PointY="19.875" />
- <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="0.75" PointY="12.75" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="1.5" PointY="42.625" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_GROUPS" Width="1.5" PointX="0.75" PointY="37.125" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS" Width="1.5" PointX="3" PointY="35.875" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS_RECIPES" Width="1.5" PointX="5.25" PointY="19.75" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="12" />
- <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="3.75" PointY="65" />
- <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="1.5" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="9" PointY="27.625" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="3.75" PointY="29" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER" Width="1.5" PointX="6" PointY="28.375" />
- <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="72.5" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="9" PointY="56.25" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="32.75" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="29.875" />
+ <EntityTypeShape EntityType="RemoteModel.ACTION_LOGS" Width="1.5" PointX="11.25" PointY="8.875" />
+ <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="4.5" PointY="30" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="4.5" PointY="60.375" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="67.5" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="4.5" PointY="73.375" />
+ <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="15.75" PointY="17.625" />
+ <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="7.75" PointY="39.125" />
+ <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="5.25" PointY="24.5" />
+ <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="0.75" PointY="13.5" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="1.5" PointY="2.375" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_GROUPS" Width="1.5" PointX="0.75" PointY="8.875" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS" Width="1.5" PointX="3" PointY="7.625" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS_RECIPES" Width="1.5" PointX="5.25" PointY="16.5" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="8.5" />
+ <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="6.75" PointY="65.875" />
+ <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="4.5" PointY="34" />
+ <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="9" PointY="32.375" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="5.5" PointY="43.375" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER" Width="1.5" PointX="7.75" PointY="42.75" />
+ <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="70.5" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="9" PointY="82.625" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="33.5" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="24.75" />
<EntityTypeShape EntityType="RemoteModel.FSE_VERSIONS" Width="1.5" PointX="11.25" PointY="28.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="1.5" PointY="79.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="3.75" PointY="74.5" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="78.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="6.75" PointY="71.5" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="6.5" PointY="57.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="8.75" PointY="65.75" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="7.5" PointY="79.75" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="9.75" PointY="71.5" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="9.5" PointY="61.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="11.75" PointY="63.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="82.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="6.75" PointY="75.5" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="68.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="1.5" PointY="75.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="3.75" PointY="70.625" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="6" PointY="36.125" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="8.25" PointY="37.5" />
- <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="13.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="11.25" PointY="16.375" />
- <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="16.125" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="6" PointY="10.125" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="24" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="11.25" PointY="31.75" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="3.75" PointY="56.125" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="6" PointY="61" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="11.25" PointY="48.5" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="24" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="27" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="20.25" />
- <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="6" PointY="42.625" />
- <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="3.75" PointY="2.75" />
- <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="12" PointY="9.125" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="46.625" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="49.25" />
- <EntityTypeShape EntityType="RemoteModel.PUBLISHED_TEST_PROJECTS" Width="1.5" PointX="8.75" PointY="1" />
- <EntityTypeShape EntityType="RemoteModel.PUBLISHED_TEST_PROJECTS_VERSIONS" Width="1.5" PointX="11" PointY="1" />
- <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="15.25" />
- <EntityTypeShape EntityType="RemoteModel.RMLS_SPOOLS" Width="1.5" PointX="5.25" PointY="15.875" />
- <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="12" PointY="13" />
- <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="14.25" PointY="13.125" />
- <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="13.5" PointY="20" />
- <EntityTypeShape EntityType="RemoteModel.SITE" Width="1.5" PointX="6" PointY="3" />
- <EntityTypeShape EntityType="RemoteModel.SITES_CATALOGS" Width="1.5" PointX="14.25" PointY="27.375" />
- <EntityTypeShape EntityType="RemoteModel.SITES_RMLS" Width="1.5" PointX="8.25" PointY="16.25" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="3" PointY="9.25" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL" Width="1.5" PointX="11.25" PointY="37.875" />
- <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="5.75" PointY="6.75" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_UPDATES" Width="1.5" PointX="8.75" PointY="4.75" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="14.25" PointY="43.125" />
- <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="10.75" PointY="4.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="14.75" PointY="8.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="15.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="15.75" PointY="3.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="16.75" PointY="8.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="17.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="9" PointY="30.75" />
- <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="14.25" PointY="32.125" />
- <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="9" PointY="24.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="9.5" PointY="57.875" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="11.75" PointY="58.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="12.5" PointY="54.875" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="14.75" PointY="56.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="9.5" PointY="71.875" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="11.75" PointY="62.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="12.5" PointY="50.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="14.75" PointY="60.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="9.5" PointY="87.875" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="11.75" PointY="69" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="76.875" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="6.75" PointY="71.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="63.25" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="4.5" PointY="56.875" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="6.75" PointY="61.625" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="7.75" PointY="79.125" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="10" PointY="52.125" />
+ <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="16.75" PointY="5.5" />
+ <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="11.25" PointY="17.125" />
+ <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="30.625" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="3" PointY="38.5" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="20.75" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="11.25" PointY="12.75" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="6.75" PointY="57" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="9" PointY="61.875" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="11.25" PointY="35" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="21" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="16.875" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="27.75" />
+ <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="7.75" PointY="76" />
+ <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="6.75" PointY="31.875" />
+ <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="12" PointY="44" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="47.375" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="50" />
+ <EntityTypeShape EntityType="RemoteModel.PUBLISHED_TEST_PROJECTS" Width="1.5" PointX="13.75" PointY="1.625" />
+ <EntityTypeShape EntityType="RemoteModel.PUBLISHED_TEST_PROJECTS_VERSIONS" Width="1.5" PointX="16" PointY="1.625" />
+ <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="16" />
+ <EntityTypeShape EntityType="RemoteModel.RMLS_SPOOLS" Width="1.5" PointX="8.25" PointY="16.5" />
+ <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="9" PointY="12.875" />
+ <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="14.25" PointY="13" />
+ <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="13.5" PointY="20.75" />
+ <EntityTypeShape EntityType="RemoteModel.SITE" Width="1.5" PointX="6" PointY="6.75" />
+ <EntityTypeShape EntityType="RemoteModel.SITES_CATALOGS" Width="1.5" PointX="11.25" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.SITES_RMLS" Width="1.5" PointX="8.25" PointY="21" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="6" PointY="11" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL" Width="1.5" PointX="11.25" PointY="39.25" />
+ <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="3.75" PointY="1.5" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_UPDATES" Width="1.5" PointX="5.75" PointY="1.5" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="14.25" PointY="29.5" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="13.75" PointY="5.5" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="13.75" PointY="9.5" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="16.75" PointY="13.5" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="17.75" PointY="16.5" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="18.75" PointY="1.5" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="18.75" PointY="6.5" />
+ <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="9" PointY="2.625" />
+ <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="11.25" PointY="4" />
+ <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="9" PointY="25" />
<AssociationConnector Association="RemoteModel.FK_ACTION_LOGS_USERS" />
<AssociationConnector Association="RemoteModel.FK_ORGANIZATIONS_ADDRESSES" />
<AssociationConnector Association="RemoteModel.FK_USERS_ADDRESSES" />