U4-10795 - granular logging - roles
This commit is contained in:
@@ -60,6 +60,38 @@ namespace Umbraco.Core.Auditing
|
||||
|
||||
MemberService.Saved += OnSavedMember;
|
||||
MemberService.Deleted += OnDeletedMember;
|
||||
MemberService.AssignedRoles += OnAssignedRoles;
|
||||
MemberService.RemovedRoles += OnRemovedRoles;
|
||||
}
|
||||
|
||||
private void OnRemovedRoles(IMemberService sender, MemberService.RolesEventArgs args)
|
||||
{
|
||||
var performingUser = PerformingUser;
|
||||
var roles = string.Join(", ", args.Roles);
|
||||
var members = ApplicationContext.Current.Services.MemberService.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
|
||||
foreach (var id in args.MemberIds)
|
||||
{
|
||||
members.TryGetValue(id, out var member);
|
||||
AuditService.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
|
||||
DateTime.Now,
|
||||
0, null,
|
||||
"umbraco/member", $"modified roles for member id:{id} \"{member?.Name ?? "(unknown)"}\" <{member?.Email ?? ""}>, removed {roles}");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnAssignedRoles(IMemberService sender, MemberService.RolesEventArgs args)
|
||||
{
|
||||
var performingUser = PerformingUser;
|
||||
var roles = string.Join(", ", args.Roles);
|
||||
var members = ApplicationContext.Current.Services.MemberService.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
|
||||
foreach (var id in args.MemberIds)
|
||||
{
|
||||
members.TryGetValue(id, out var member);
|
||||
AuditService.Write(performingUser.Id, $"User \"{performingUser.Name}\" <{performingUser.Email}>", PerformingIp,
|
||||
DateTime.Now,
|
||||
0, null,
|
||||
"umbraco/member", $"modified roles for member id:{id} \"{member?.Name ?? "(unknown)"}\" <{member?.Email ?? ""}>, assigned {roles}");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSavedUserGroup(IUserService sender, SaveEventArgs<IUserGroup> saveEventArgs)
|
||||
|
||||
@@ -39,5 +39,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
void AssignRoles(int[] memberIds, string[] roleNames);
|
||||
|
||||
void DissociateRoles(int[] memberIds, string[] roleNames);
|
||||
|
||||
int[] GetMemberIds(string[] names);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +183,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
}
|
||||
|
||||
public IEnumerable<IMemberGroup> GetMemberGroupsForMember(string username)
|
||||
{
|
||||
{
|
||||
var sql = new Sql()
|
||||
.Select("un.*")
|
||||
.From("umbracoNode AS un")
|
||||
@@ -192,16 +192,15 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
.InnerJoin("cmsMember")
|
||||
.On("cmsMember.nodeId = cmsMember2MemberGroup.Member")
|
||||
.Where("un.nodeObjectType=@objectType", new { objectType = NodeObjectTypeId })
|
||||
.Where("cmsMember.LoginName=@loginName", new { loginName = username });
|
||||
|
||||
.Where("cmsMember.LoginName=@loginName", new { loginName = username });
|
||||
|
||||
return Database.Fetch<NodeDto>(sql)
|
||||
.DistinctBy(dto => dto.NodeId)
|
||||
.Select(x => _modelFactory.BuildEntity(x));
|
||||
}
|
||||
|
||||
public void AssignRoles(string[] usernames, string[] roleNames)
|
||||
public int[] GetMemberIds(string[] names)
|
||||
{
|
||||
//first get the member ids based on the usernames
|
||||
var memberSql = new Sql();
|
||||
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
|
||||
memberSql.Select("umbracoNode.id")
|
||||
@@ -209,25 +208,19 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
.InnerJoin<MemberDto>()
|
||||
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
|
||||
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
|
||||
.Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames });
|
||||
var memberIds = Database.Fetch<int>(memberSql).ToArray();
|
||||
.Where("cmsMember.LoginName in (@names)", new { names });
|
||||
return Database.Fetch<int>(memberSql).ToArray();
|
||||
}
|
||||
|
||||
public void AssignRoles(string[] usernames, string[] roleNames)
|
||||
{
|
||||
var memberIds = GetMemberIds(usernames);
|
||||
AssignRolesInternal(memberIds, roleNames);
|
||||
}
|
||||
|
||||
public void DissociateRoles(string[] usernames, string[] roleNames)
|
||||
{
|
||||
//first get the member ids based on the usernames
|
||||
var memberSql = new Sql();
|
||||
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
|
||||
memberSql.Select("umbracoNode.id")
|
||||
.From<NodeDto>()
|
||||
.InnerJoin<MemberDto>()
|
||||
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
|
||||
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
|
||||
.Where("cmsMember.LoginName in (@usernames)", new { usernames = usernames });
|
||||
var memberIds = Database.Fetch<int>(memberSql).ToArray();
|
||||
|
||||
var memberIds = GetMemberIds(usernames);
|
||||
DissociateRolesInternal(memberIds, roleNames);
|
||||
}
|
||||
|
||||
@@ -337,4 +330,4 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
/// </summary>
|
||||
internal static event TypedEventHandler<IMemberGroupRepository, SaveEventArgs<IMemberGroup>> SavedMemberGroup;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1173,12 +1173,16 @@ namespace Umbraco.Core.Services
|
||||
|
||||
public void AssignRoles(string[] usernames, string[] roleNames)
|
||||
{
|
||||
int[] memberIds;
|
||||
using (var uow = UowProvider.GetUnitOfWork())
|
||||
{
|
||||
var repository = RepositoryFactory.CreateMemberGroupRepository(uow);
|
||||
repository.AssignRoles(usernames, roleNames);
|
||||
memberIds = repository.GetMemberIds(usernames);
|
||||
repository.AssignRoles(memberIds, roleNames);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
AssignedRoles?.Invoke(this, new RolesEventArgs(memberIds, roleNames));
|
||||
}
|
||||
|
||||
public void DissociateRole(string username, string roleName)
|
||||
@@ -1188,12 +1192,16 @@ namespace Umbraco.Core.Services
|
||||
|
||||
public void DissociateRoles(string[] usernames, string[] roleNames)
|
||||
{
|
||||
int[] memberIds;
|
||||
using (var uow = UowProvider.GetUnitOfWork())
|
||||
{
|
||||
var repository = RepositoryFactory.CreateMemberGroupRepository(uow);
|
||||
repository.DissociateRoles(usernames, roleNames);
|
||||
memberIds = repository.GetMemberIds(usernames);
|
||||
repository.DissociateRoles(memberIds, roleNames);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
RemovedRoles?.Invoke(this, new RolesEventArgs(memberIds, roleNames));
|
||||
}
|
||||
|
||||
public void AssignRole(int memberId, string roleName)
|
||||
@@ -1209,6 +1217,8 @@ namespace Umbraco.Core.Services
|
||||
repository.AssignRoles(memberIds, roleNames);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
AssignedRoles?.Invoke(this, new RolesEventArgs(memberIds, roleNames));
|
||||
}
|
||||
|
||||
public void DissociateRole(int memberId, string roleName)
|
||||
@@ -1224,6 +1234,8 @@ namespace Umbraco.Core.Services
|
||||
repository.DissociateRoles(memberIds, roleNames);
|
||||
uow.Commit();
|
||||
}
|
||||
|
||||
RemovedRoles?.Invoke(this, new RolesEventArgs(memberIds, roleNames));
|
||||
}
|
||||
|
||||
|
||||
@@ -1289,6 +1301,21 @@ namespace Umbraco.Core.Services
|
||||
/// </summary>
|
||||
public static event TypedEventHandler<IMemberService, SaveEventArgs<IMember>> Saved;
|
||||
|
||||
public static event TypedEventHandler<IMemberService, RolesEventArgs> AssignedRoles;
|
||||
public static event TypedEventHandler<IMemberService, RolesEventArgs> RemovedRoles;
|
||||
|
||||
public class RolesEventArgs : EventArgs
|
||||
{
|
||||
public RolesEventArgs(int[] memberIds, string[] roles)
|
||||
{
|
||||
MemberIds = memberIds;
|
||||
Roles = roles;
|
||||
}
|
||||
|
||||
public int[] MemberIds { get; set; }
|
||||
public string[] Roles { get; set; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user