27c21175d7
Migrate much of BI to Services. Added Wireless Profile Provider plugin feature. Added Certificate Authority Provider plugin feature. Modified Certificate Provider plugin feature. Database migration v17, for Device Profiles. Enrolment Client Updated to support CA Certificates, Wireless Profiles and Hardware Info. New Client Enrolment Protocol to support new features. Plugin Manifest Generator added to main solution. Improved AD search performance.
83 lines
2.6 KiB
C#
83 lines
2.6 KiB
C#
using Disco.Data.Repository;
|
|
using Disco.Models.Repository;
|
|
using Disco.Services.Authorization;
|
|
using Disco.Services.Users;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace Disco.Services
|
|
{
|
|
public static class UserFlagExtensions
|
|
{
|
|
|
|
#region Edit Comments
|
|
public static bool CanEditComments(this UserFlagAssignment fa)
|
|
{
|
|
return UserService.CurrentAuthorization.Has(Claims.User.Actions.EditFlags);
|
|
}
|
|
public static void OnEditComments(this UserFlagAssignment fa, string Comments)
|
|
{
|
|
if (!fa.CanEditComments())
|
|
throw new InvalidOperationException("Editing comments for user flags is denied");
|
|
|
|
fa.Comments = string.IsNullOrWhiteSpace(Comments) ? null : Comments.Trim();
|
|
}
|
|
#endregion
|
|
|
|
#region Remove
|
|
public static bool CanRemove(this UserFlagAssignment fa)
|
|
{
|
|
if (fa.RemovedDate.HasValue)
|
|
return false;
|
|
|
|
return UserService.CurrentAuthorization.Has(Claims.User.Actions.RemoveFlags);
|
|
}
|
|
public static void OnRemove(this UserFlagAssignment fa, User Technician)
|
|
{
|
|
if (!fa.CanRemove())
|
|
throw new InvalidOperationException("Removing user flags is denied");
|
|
|
|
fa.RemovedDate = DateTime.Now;
|
|
fa.RemovedUserId = Technician.UserId;
|
|
}
|
|
#endregion
|
|
|
|
#region Add
|
|
public static bool CanAddUserFlags(this User u)
|
|
{
|
|
return UserService.CurrentAuthorization.Has(Claims.User.Actions.AddFlags);
|
|
}
|
|
public static bool CanAddUserFlag(this User u, UserFlag flag)
|
|
{
|
|
// Shortcut
|
|
if (!u.CanAddUserFlags())
|
|
return false;
|
|
|
|
// Already has User Flag?
|
|
if (u.UserFlagAssignments.Any(fa => !fa.RemovedDate.HasValue && fa.UserFlagId == flag.Id))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
public static UserFlagAssignment OnAddUserFlag(this User u, DiscoDataContext Database, UserFlag flag, User Technician, string Comments)
|
|
{
|
|
if (!u.CanAddUserFlag(flag))
|
|
throw new InvalidOperationException("Adding user flag is denied");
|
|
|
|
var fa = new UserFlagAssignment()
|
|
{
|
|
UserFlagId = flag.Id,
|
|
UserId = u.UserId,
|
|
AddedDate = DateTime.Now,
|
|
AddedUserId = Technician.UserId,
|
|
Comments = string.IsNullOrWhiteSpace(Comments) ? null : Comments.Trim()
|
|
};
|
|
|
|
Database.UserFlagAssignments.Add(fa);
|
|
return fa;
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|