Files
Disco/Disco.Web/Controllers/UserController.cs
T
Gary Sharp 4c3a68da30 Feature #26: User Flags
Flags can be associated with Users. Includes minor updates to Job Queues
and improved visibility of user information.
2014-06-10 17:16:24 +10:00

123 lines
4.3 KiB
C#

using Disco.BI.Extensions;
using Disco.Models.Services.Jobs.JobLists;
using Disco.Models.UI.User;
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Authorization.Roles;
using Disco.Services.Interop.ActiveDirectory;
using Disco.Services.Plugins.Features.UIExtension;
using Disco.Services.Users;
using Disco.Services.Users.UserFlags;
using Disco.Services.Web;
using System;
using System.Linq;
using System.Web.Mvc;
namespace Disco.Web.Controllers
{
public partial class UserController : AuthorizedDatabaseController
{
#region Index
public virtual ActionResult Index()
{
var m = new Models.User.IndexModel();
// UI Extensions
UIExtensions.ExecuteExtensions<UserIndexModel>(this.ControllerContext, m);
return View();
}
#endregion
#region Show
[DiscoAuthorize(Claims.User.Show)]
public virtual ActionResult Show(string id, string Domain)
{
if (string.IsNullOrWhiteSpace(id))
throw new ArgumentNullException("id", "The User Id must be provided");
if (string.IsNullOrEmpty(Domain))
id = ActiveDirectory.Context.PrimaryDomain.NetBiosName + @"\" + id;
else
id = Domain + @"\" + id;
var m = new Models.User.ShowModel();
Database.Configuration.LazyLoadingEnabled = true;
// Update User Cache
// Do this first so the Database is updated if necessary
try
{
UserService.GetUser(id, Database, true);
}
catch (ArgumentException)
{
// Ignore if User not in Active Directory anymore
}
m.User = Database.Users
.Include("DeviceUserAssignments.Device.DeviceModel")
.Include("DeviceUserAssignments.Device.DeviceProfile")
.Include("DeviceUserAssignments.Device.DeviceBatch")
.Include("UserAttachments.TechUser")
.Include("UserAttachments.DocumentTemplate")
.Include("UserFlagAssignments.AddedUser")
.Include("UserFlagAssignments.RemovedUser")
.FirstOrDefault(um => um.UserId == id);
if (m.User == null)
throw new ArgumentException("Unknown User Id", "id");
if (Authorization.Has(Claims.User.ShowJobs))
{
m.Jobs = new JobTableModel()
{
ShowStatus = true,
ShowDevice = true,
ShowUser = false,
IsSmallTable = false,
HideClosedJobs = true,
EnablePaging = false
};
m.Jobs.Fill(Database, Disco.Services.Searching.Search.BuildJobTableModel(Database).Where(j => j.UserId == id).OrderByDescending(j => j.Id), true);
}
if (Authorization.Has(Claims.User.ShowFlagAssignments))
{
var usedFlags = m.User.UserFlagAssignments
.Where(a => !a.RemovedDate.HasValue)
.Select(a => a.UserFlagId)
.Distinct().ToList();
m.AvailableUserFlags = UserFlagService.GetUserFlags().Where(f => !usedFlags.Contains(f.Id)).ToList();
}
try
{
if (Authorization.Has(Claims.User.ShowAuthorization))
{
m.AuthorizationToken = UserService.GetAuthorization(id);
var claims = m.AuthorizationToken.RoleTokens.Cast<RoleToken>().Select(rt => rt.Claims).ToArray();
if (claims.Length > 0)
m.ClaimNavigator = Claims.RoleClaimNavigator.BuildClaimTree(claims);
}
}
catch (ArgumentException)
{
// Ignore if User not in Active Directory anymore
}
if (Authorization.Has(Claims.User.Actions.GenerateDocuments))
m.DocumentTemplates = m.User.AvailableDocumentTemplates(Database, UserService.CurrentUser, DateTime.Now);
// UI Extensions
UIExtensions.ExecuteExtensions<UserShowModel>(this.ControllerContext, m);
return View(m);
}
#endregion
}
}