v1.2.0
This commit is contained in:
@@ -104,17 +104,20 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData);
|
||||
RefreshModel(model);
|
||||
|
||||
// Organisation.
|
||||
SysId organisationId = model.ExtractSysId(model.Filter.OrganisationId);
|
||||
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
|
||||
if (organisation == null || !organisation.IsStatusActive)
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
|
||||
{
|
||||
SaLogger.Warn(fn + " " + (organisation == null ? "Invalid" : "Inactive") + " organisation for Member list. OrganisationId: '" + model.Filter.OrganisationId + "'");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
if (organisation != null)
|
||||
{
|
||||
// Organisation.
|
||||
SysId organisationId = model.ExtractSysId(model.Filter.OrganisationId);
|
||||
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
|
||||
disposableItems.Add(organisation);
|
||||
if (organisation == null || !organisation.IsStatusActive)
|
||||
{
|
||||
SaLogger.Warn(fn + " " + (organisation == null ? "Invalid" : "Inactive") + " organisation for Member list. OrganisationId: '" + model.Filter.OrganisationId + "'");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
// Store filter data.
|
||||
SessionData_Online.Filter.SetMemberOrganisation(organisation);
|
||||
|
||||
@@ -124,11 +127,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
responseData.Titles.Add(title.Code, title.Desc);
|
||||
|
||||
// Reference data - member roles.
|
||||
foreach (TypeCodeDesc memberRole in OrganisationRoleCodes.FindAll( item => item.Type != (int)Sax.OrganisationRole.Member))
|
||||
foreach (TypeCodeDesc memberRole in OrganisationRoleCodes.FindAll(item => item.Type != (int)Sax.OrganisationRole.Member))
|
||||
responseData.MemberRoles.Add(memberRole.Code, Localiser.GetOrganisationRoleCaption((Sax.OrganisationRole)memberRole.Type));
|
||||
|
||||
// Session User roles.
|
||||
responseData.User.CanManage = AccountMgr.UserHasOrganisationRole(SessionData.User.UserAccountId, organisationId, Sax.OrganisationRole.MemberAdmin);
|
||||
responseData.User.CanManage = AccountMgr.UserHasAnyOrganisationRole(SessionData.User.UserAccountId, organisation.Id, new List<Sax.OrganisationRole> { Sax.OrganisationRole.Admin, Sax.OrganisationRole.MemberAdmin });
|
||||
|
||||
// Item filter.
|
||||
SaxUserOrganisation.Params prmMember = new SaxUserOrganisation.Params();
|
||||
@@ -150,11 +153,11 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
ColumnDfn colAdminComment = responseData.User.CanManage ? AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.AdminComment) : new ColumnDfn(-1, "");
|
||||
ColumnDfn colCreatedOn = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.CreateOn_Date);
|
||||
List<ColumnDfn> columns = new List<ColumnDfn>()
|
||||
{
|
||||
colId, colUserAccountId , colEmailAddress, colDisplayName,
|
||||
colOrganisationRoleCodes, colUserStatus,
|
||||
colAdminComment, colCreatedOn
|
||||
};
|
||||
{
|
||||
colId, colUserAccountId , colEmailAddress, colDisplayName,
|
||||
colOrganisationRoleCodes, colUserStatus,
|
||||
colAdminComment, colCreatedOn
|
||||
};
|
||||
|
||||
// Sort columns.
|
||||
colCreatedOn.SortAscending = false;
|
||||
@@ -230,9 +233,13 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
if (!SysId.IsValid(memberId))
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
|
||||
|
||||
// Retrieve item.
|
||||
using (SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(memberId))
|
||||
// Record disposable items as they are created so all can be disposed when needed.
|
||||
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
|
||||
{
|
||||
|
||||
// Retrieve item.
|
||||
SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(memberId);
|
||||
disposableItems.Add(userOrganisation);
|
||||
if (userOrganisation == null)
|
||||
{
|
||||
SaLogger.Warn(fn + " Failed to retrieve Organisation Member for Id: '" + model.MemberId + "'");
|
||||
@@ -240,33 +247,31 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
}
|
||||
|
||||
// Validate organisation.
|
||||
using (SaxOrganisation organisation = AccountMgr.GetOrganisationById(userOrganisation.OrganisationId))
|
||||
SaxOrganisation organisation = AccountMgr.GetOrganisationById(userOrganisation.OrganisationId);
|
||||
disposableItems.Add(organisation);
|
||||
if (organisation == null || !organisation.IsStatusActive)
|
||||
{
|
||||
if (organisation == null || !organisation.IsStatusActive)
|
||||
{
|
||||
SaLogger.Warn(fn + " " + (organisation == null ? "Invalid" : "Inactive") + " Organisation for Member. Id: '" + userOrganisation.OrganisationId + "'");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
// Session User roles.
|
||||
bool userCanManageMembers = AccountMgr.UserHasOrganisationRole(SessionData.User.UserAccountId, organisation.Id, Sax.OrganisationRole.MemberAdmin);
|
||||
|
||||
// Validate user account.
|
||||
using (SaxUserAccount userAccount = AccountMgr.GetUserAccountById(userOrganisation.UserAccountId))
|
||||
{
|
||||
bool userActive = userAccount.IsStatusActive || (userAccount.IsStatusAwaiting && userCanManageMembers);
|
||||
if (userAccount == null || !userActive)
|
||||
{
|
||||
SaLogger.Warn(fn + " " + (organisation == null ? "Invalid" : "Inactive") + " User Account for Member. Id: '" + userOrganisation.UserAccountId + "'");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
// Make a note of the selected Organisation.
|
||||
SessionData_Online.Filter.SetMemberOrganisation(organisation);
|
||||
|
||||
PopulateMemberResponseData(model, userOrganisation, userAccount, organisation, responseData.Member);
|
||||
}
|
||||
SaLogger.Warn(fn + " " + (organisation == null ? "Invalid" : "Inactive") + " Organisation for Member. Id: '" + userOrganisation.OrganisationId + "'");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
// Session User roles.
|
||||
bool userCanManageMembers = AccountMgr.UserHasAnyOrganisationRole(SessionData.User.UserAccountId, organisation.Id, new List<Sax.OrganisationRole> { Sax.OrganisationRole.Admin, Sax.OrganisationRole.MemberAdmin });
|
||||
|
||||
// Validate user account.
|
||||
SaxUserAccount userAccount = AccountMgr.GetUserAccountById(userOrganisation.UserAccountId);
|
||||
disposableItems.Add(userAccount);
|
||||
bool userActive = userAccount.IsStatusActive || (userAccount.IsStatusAwaiting && userCanManageMembers);
|
||||
if (userAccount == null || !userActive)
|
||||
{
|
||||
SaLogger.Warn(fn + " " + (organisation == null ? "Invalid" : "Inactive") + " User Account for Member. Id: '" + userOrganisation.UserAccountId + "'");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
// Make a note of the selected Organisation.
|
||||
SessionData_Online.Filter.SetMemberOrganisation(organisation);
|
||||
|
||||
PopulateMemberResponseData(model, userOrganisation, userAccount, organisation, responseData.Member);
|
||||
}
|
||||
|
||||
// Construct response.
|
||||
@@ -361,7 +366,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
}
|
||||
|
||||
// Ensure that the user has the correct role to update Members for this organisation.
|
||||
bool userCanManageMembers = AccountMgr.UserHasOrganisationRole(SessionData.User.UserAccountId, organisationId, Sax.OrganisationRole.MemberAdmin);
|
||||
bool userCanManageMembers = AccountMgr.UserHasAnyOrganisationRole(SessionData.User.UserAccountId, organisationId, new List<Sax.OrganisationRole> { Sax.OrganisationRole.Admin, Sax.OrganisationRole.MemberAdmin });
|
||||
if (!userCanManageMembers)
|
||||
{
|
||||
SaLogger.Warn(fn + " User doesn't have 'Member Admin' role for Organisation Id: " + organisationId);
|
||||
@@ -385,6 +390,23 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
SaLogger.Warn(fn + " Inconsistent User Account Id specified for User Organisation. Expected: " + userOrganisation.UserAccountId + ". Found: " + userAccount.Id);
|
||||
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
||||
}
|
||||
|
||||
// Validate roles for current user.
|
||||
if (userOrganisation.UserAccountId.Equals(SessionData.User.UserAccountId))
|
||||
{
|
||||
// User is modifying their own organisation member.
|
||||
if (userOrganisation.CanManageOrganisation && !model.OrganisationRoleCodes.Any(item => item.Type == (int)Sax.OrganisationRole.Admin))
|
||||
{
|
||||
// User has removed their own 'Admin' role.
|
||||
SaLogger.Warn(fn + " Unable to store member - user is attempting to remove their own 'Admin' role.");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["organisation.members.msg.remove.own.admin.role"]));
|
||||
}
|
||||
if (!userOrganisation.CanManageMembers)
|
||||
{
|
||||
SaLogger.Warn(fn + " Unable to store member - user is attempting to remove their own 'Admin' and/or 'Member Admin' role.");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["organisation.members.msg.remove.own.admin.role"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// New member - Lookup user by email and create new account if needed.
|
||||
@@ -458,17 +480,6 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
// Ensure user has member role.
|
||||
userOrganisation.AddOrganisationRole(Sax.OrganisationRole.Member);
|
||||
|
||||
// Validate roles.
|
||||
if (userOrganisation.UserAccountId.Equals(SessionData.User.UserAccountId))
|
||||
{
|
||||
// User is modifying their own member.
|
||||
if (!userOrganisation.HasOrganisationRole(Sax.OrganisationRole.MemberAdmin))
|
||||
{
|
||||
SaLogger.Warn(fn + " Unable to store member - user is attempting to remove their own 'Member Admin' role.");
|
||||
return Json(responseData.SetMessage(messageTitle, Localiser["organisation.members.msg.remove.own.admin.role"]));
|
||||
}
|
||||
}
|
||||
|
||||
// User organisation properties.
|
||||
if (model.MemberAdminComment != null)
|
||||
userOrganisation.AdminComment = model.MemberAdminComment;
|
||||
@@ -548,7 +559,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
}
|
||||
|
||||
// Ensure that the user has the correct role to update Members for this organisation.
|
||||
bool userCanManageMembers = AccountMgr.UserHasOrganisationRole(SessionData.User.UserAccountId, organisation.Id, Sax.OrganisationRole.MemberAdmin);
|
||||
bool userCanManageMembers = AccountMgr.UserHasAnyOrganisationRole(SessionData.User.UserAccountId, organisation.Id, new List<Sax.OrganisationRole> { Sax.OrganisationRole.Admin, Sax.OrganisationRole.MemberAdmin });
|
||||
if (!userCanManageMembers)
|
||||
{
|
||||
SaLogger.Warn(fn + " User doesn't have 'Member Admin' role for Organisation Id: " + organisation.Id);
|
||||
@@ -664,7 +675,7 @@ namespace Saxonite.Net.Core.Web.Online.Controllers
|
||||
}
|
||||
|
||||
// Ensure that the user has the correct role to update Members for this organisation.
|
||||
bool userCanManageMembers = AccountMgr.UserHasOrganisationRole(SessionData.User.UserAccountId, organisation.Id, Sax.OrganisationRole.MemberAdmin);
|
||||
bool userCanManageMembers = AccountMgr.UserHasAnyOrganisationRole(SessionData.User.UserAccountId, organisation.Id, new List<Sax.OrganisationRole> { Sax.OrganisationRole.Admin, Sax.OrganisationRole.MemberAdmin });
|
||||
if (!userCanManageMembers)
|
||||
{
|
||||
SaLogger.Warn(fn + " User doesn't have 'Member Admin' role for Organisation Id: " + organisation.Id);
|
||||
|
||||
Reference in New Issue
Block a user