153 lines
4.4 KiB
C#
153 lines
4.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Thermo.Active.Model.DatabaseModels;
|
|
using Thermo.Active.Model.DTOModels;
|
|
using static Thermo.Active.Model.Constants;
|
|
|
|
namespace Thermo.Active.Database.Controllers
|
|
{
|
|
public class MachinesUsersController : IDisposable
|
|
{
|
|
private DatabaseContext dbCtx;
|
|
|
|
public MachinesUsersController()
|
|
{
|
|
// Initialize database context
|
|
dbCtx = new DatabaseContext();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
// Clear database context
|
|
dbCtx.Dispose();
|
|
}
|
|
|
|
public MachineUserModel FindByUserId(int machineId, int userId)
|
|
{
|
|
return dbCtx
|
|
.MachinesUsers
|
|
.Include("Role") // TODO Add machine and user info?
|
|
.Where(x => x.MachineId == machineId && x.UserId == userId)
|
|
.FirstOrDefault();
|
|
}
|
|
|
|
public MachineUserModel FindByIdWithData(int id)
|
|
{
|
|
return dbCtx
|
|
.MachinesUsers
|
|
.Include("Role") // Join with Role, Machine, User
|
|
.Include("Machine")
|
|
.Include("User")
|
|
.Where(x => x.MachineUserId == id)
|
|
.FirstOrDefault();
|
|
}
|
|
|
|
public MachineUserModel Create(int machineId, int userId, int roleId)
|
|
{
|
|
// Create database model
|
|
MachineUserModel machine = new MachineUserModel()
|
|
{
|
|
MachineId = machineId,
|
|
UserId = userId,
|
|
RoleId = roleId
|
|
};
|
|
// Add into database
|
|
dbCtx.MachinesUsers.Add(
|
|
machine
|
|
);
|
|
// Commit changes
|
|
dbCtx.SaveChanges();
|
|
|
|
return machine;
|
|
}
|
|
|
|
public DTORoleModel GetUserRoleData(int machineId, int userId)
|
|
{
|
|
var machineUser = dbCtx
|
|
.MachinesUsers
|
|
.Include("Role")
|
|
.Where(x => x.MachineId == machineId && x.UserId == userId) // Find by machine id and user id, joining with role
|
|
.FirstOrDefault();
|
|
|
|
if (machineUser != null)
|
|
{
|
|
RoleModel role = machineUser.Role;
|
|
return new DTORoleModel()
|
|
{
|
|
Id = role.RoleId,
|
|
Name = role.Name,
|
|
Level = role.Level
|
|
};
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public bool UserIsCmsAdmin(int machineId, int userId)
|
|
{
|
|
MachineUserModel user = FindByUserId(machineId, userId);
|
|
if (user.Role.RoleId == (int)ROLE_IDS.CMS_SERVICE || user.Role.RoleId == (int)ROLE_IDS.CMS_UT)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public bool RoleIsAdminOrHigher(int roleId)
|
|
{
|
|
var tmpRole = dbCtx.Roles
|
|
.ToList()
|
|
.First(X => X.RoleId == roleId);
|
|
|
|
if (tmpRole == null)
|
|
return false;
|
|
else
|
|
return tmpRole.Level >= MIN_ADMIN_ROLE;
|
|
}
|
|
|
|
public int CompareUsersRole(int firstUserId, int secondUserId, int machineId)
|
|
{
|
|
MachineUserModel firstUser = FindByUserId(machineId, firstUserId);
|
|
MachineUserModel secondUser = FindByUserId(machineId, secondUserId);
|
|
|
|
if (firstUser.Role.Level == secondUser.Role.Level)
|
|
return 0;
|
|
else if (firstUser.Role.Level > secondUser.Role.Level)
|
|
return 1;
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
public List<DTORoleModel> GetRolesList()
|
|
{
|
|
return dbCtx
|
|
.Roles.Where(X => X.Level < MIN_CMS_ROLE)
|
|
.Select(x => new DTORoleModel()
|
|
{
|
|
Id = x.RoleId,
|
|
Name = x.Name
|
|
})
|
|
.ToList();
|
|
}
|
|
|
|
public void UpdateUserRole(int machineId, int userId, int roleId)
|
|
{
|
|
MachineUserModel machineUser = FindByUserId(machineId, userId);
|
|
if (machineUser == null)
|
|
return;
|
|
|
|
machineUser.RoleId = roleId;
|
|
|
|
dbCtx.SaveChanges();
|
|
}
|
|
|
|
public RoleModel GetUserRole(int machineId, int userId)
|
|
{
|
|
var machine = FindByUserId(machineId, userId);
|
|
if (machine != null)
|
|
return machine.Role;
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |