mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Adding Roles event source to Orchard.Roles [Core Module Change]
This commit is contained in:
@@ -5,6 +5,7 @@ using Orchard.ContentManagement.Drivers;
|
||||
using Orchard.Data;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Roles.Events;
|
||||
using Orchard.Roles.Models;
|
||||
using Orchard.Roles.Services;
|
||||
using Orchard.Roles.ViewModels;
|
||||
@@ -19,6 +20,7 @@ namespace Orchard.Roles.Drivers {
|
||||
private readonly INotifier _notifier;
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
private readonly IAuthorizationService _authorizationService;
|
||||
private readonly IRoleEventHandler _roleEventHandlers;
|
||||
private const string TemplateName = "Parts/Roles.UserRoles";
|
||||
|
||||
public UserRolesPartDriver(
|
||||
@@ -26,12 +28,15 @@ namespace Orchard.Roles.Drivers {
|
||||
IRoleService roleService,
|
||||
INotifier notifier,
|
||||
IAuthenticationService authenticationService,
|
||||
IAuthorizationService authorizationService) {
|
||||
IAuthorizationService authorizationService,
|
||||
IRoleEventHandler roleEventHandlers) {
|
||||
|
||||
_userRolesRepository = userRolesRepository;
|
||||
_roleService = roleService;
|
||||
_notifier = notifier;
|
||||
_authenticationService = authenticationService;
|
||||
_authorizationService = authorizationService;
|
||||
_roleEventHandlers = roleEventHandlers;
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
|
||||
@@ -70,16 +75,18 @@ namespace Orchard.Roles.Drivers {
|
||||
|
||||
var model = BuildEditorViewModel(userRolesPart);
|
||||
if (updater.TryUpdateModel(model, Prefix, null, null)) {
|
||||
var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.UserId == model.User.Id);
|
||||
var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.UserId == model.User.Id).ToArray();
|
||||
var currentRoleRecords = currentUserRoleRecords.Select(x => x.Role);
|
||||
var targetRoleRecords = model.Roles.Where(x => x.Granted).Select(x => _roleService.GetRole(x.RoleId));
|
||||
var targetRoleRecords = model.Roles.Where(x => x.Granted).Select(x => _roleService.GetRole(x.RoleId)).ToArray();
|
||||
foreach (var addingRole in targetRoleRecords.Where(x => !currentRoleRecords.Contains(x))) {
|
||||
_notifier.Warning(T("Adding role {0} to user {1}", addingRole.Name, userRolesPart.As<IUser>().UserName));
|
||||
_userRolesRepository.Create(new UserRolesPartRecord { UserId = model.User.Id, Role = addingRole });
|
||||
_roleEventHandlers.UserAdded(new UserAddedContext {Role = addingRole, User = model.User});
|
||||
}
|
||||
foreach (var removingRole in currentUserRoleRecords.Where(x => !targetRoleRecords.Contains(x.Role))) {
|
||||
_notifier.Warning(T("Removing role {0} from user {1}", removingRole.Role.Name, userRolesPart.As<IUser>().UserName));
|
||||
_userRolesRepository.Delete(removingRole);
|
||||
_roleEventHandlers.UserRemoved(new UserRemovedContext { Role = removingRole.Role, User = model.User });
|
||||
}
|
||||
}
|
||||
return ContentShape("Parts_Roles_UserRoles_Edit",
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
using Orchard.Events;
|
||||
|
||||
namespace Orchard.Roles.Events {
|
||||
public interface IRoleEventHandler : IEventHandler {
|
||||
void Created(RoleCreatedContext context);
|
||||
void Removed(RoleRemovedContext context);
|
||||
void PermissionsChanged(PermissionAddedContext context);
|
||||
void UserAdded(UserAddedContext context);
|
||||
void UserRemoved(UserRemovedContext context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.Roles.Events {
|
||||
public class PermissionAddedContext : PermissionRoleContext {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.Roles.Events {
|
||||
public class PermissionRemovedContext : PermissionRoleContext {}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Orchard.Roles.Models;
|
||||
|
||||
namespace Orchard.Roles.Events {
|
||||
public class PermissionRoleContext : RoleContext {
|
||||
public PermissionRecord Permission { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Orchard.Roles.Models;
|
||||
|
||||
namespace Orchard.Roles.Events {
|
||||
public class RoleContext {
|
||||
public RoleRecord Role { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.Roles.Events {
|
||||
public class RoleCreatedContext : RoleContext {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.Roles.Events {
|
||||
public class RoleRemovedContext : RoleContext {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.Roles.Events {
|
||||
public class UserAddedContext : UserRoleContext {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.Roles.Events {
|
||||
public class UserRemovedContext : UserRoleContext {}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Orchard.Security;
|
||||
|
||||
namespace Orchard.Roles.Events {
|
||||
public class UserRoleContext : RoleContext {
|
||||
public IUser User { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -72,6 +72,16 @@
|
||||
<Compile Include="Commands\RoleCommands.cs" />
|
||||
<Compile Include="Controllers\AdminController.cs" />
|
||||
<Compile Include="Drivers\UserTaskDriver.cs" />
|
||||
<Compile Include="Events\IRoleEventHandler.cs" />
|
||||
<Compile Include="Events\PermissionAddedContext.cs" />
|
||||
<Compile Include="Events\PermissionRemovedContext.cs" />
|
||||
<Compile Include="Events\PermissionRoleContext.cs" />
|
||||
<Compile Include="Events\RoleContext.cs" />
|
||||
<Compile Include="Events\RoleCreatedContext.cs" />
|
||||
<Compile Include="Events\RoleRemovedContext.cs" />
|
||||
<Compile Include="Events\UserAddedContext.cs" />
|
||||
<Compile Include="Events\UserRemovedContext.cs" />
|
||||
<Compile Include="Events\UserRoleContext.cs" />
|
||||
<Compile Include="Forms\SelectRolesForms.cs" />
|
||||
<Compile Include="Forms\UserTaskForms.cs" />
|
||||
<Compile Include="ImportExport\RolesCustomExportStep.cs" />
|
||||
|
||||
@@ -6,6 +6,7 @@ using Orchard.Caching;
|
||||
using Orchard.Data;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Logging;
|
||||
using Orchard.Roles.Events;
|
||||
using Orchard.Roles.Models;
|
||||
using Orchard.Security.Permissions;
|
||||
|
||||
@@ -20,6 +21,7 @@ namespace Orchard.Roles.Services {
|
||||
private readonly IEnumerable<IPermissionProvider> _permissionProviders;
|
||||
private readonly ICacheManager _cacheManager;
|
||||
private readonly ISignals _signals;
|
||||
private readonly IRoleEventHandler _roleEventHandlers;
|
||||
|
||||
public RoleService(
|
||||
IRepository<RoleRecord> roleRepository,
|
||||
@@ -27,14 +29,16 @@ namespace Orchard.Roles.Services {
|
||||
IRepository<UserRolesPartRecord> userRolesRepository,
|
||||
IEnumerable<IPermissionProvider> permissionProviders,
|
||||
ICacheManager cacheManager,
|
||||
ISignals signals
|
||||
) {
|
||||
ISignals signals,
|
||||
IRoleEventHandler roleEventHandlers) {
|
||||
|
||||
_roleRepository = roleRepository;
|
||||
_permissionRepository = permissionRepository;
|
||||
_userRolesRepository = userRolesRepository;
|
||||
_permissionProviders = permissionProviders;
|
||||
_cacheManager = cacheManager;
|
||||
_signals = signals;
|
||||
_roleEventHandlers = roleEventHandlers;
|
||||
Logger = NullLogger.Instance;
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
@@ -59,7 +63,9 @@ namespace Orchard.Roles.Services {
|
||||
if (GetRoleByName(roleName) != null)
|
||||
return;
|
||||
|
||||
_roleRepository.Create(new RoleRecord { Name = roleName });
|
||||
var roleRecord = new RoleRecord {Name = roleName};
|
||||
_roleRepository.Create(roleRecord);
|
||||
_roleEventHandlers.Created(new RoleCreatedContext { Role = roleRecord });
|
||||
TriggerSignal();
|
||||
}
|
||||
|
||||
@@ -74,7 +80,9 @@ namespace Orchard.Roles.Services {
|
||||
RoleRecord roleRecord = GetRoleByName(roleName);
|
||||
PermissionRecord permissionRecord = _permissionRepository.Get(x => x.Name == permissionName);
|
||||
roleRecord.RolesPermissions.Add(new RolesPermissionsRecord { Permission = permissionRecord, Role = roleRecord });
|
||||
_roleEventHandlers.PermissionsChanged(new PermissionAddedContext { Role = roleRecord, Permission = permissionRecord });
|
||||
TriggerSignal();
|
||||
|
||||
}
|
||||
|
||||
public void UpdateRole(int id, string roleName, IEnumerable<string> rolePermissions) {
|
||||
@@ -92,6 +100,7 @@ namespace Orchard.Roles.Services {
|
||||
}
|
||||
PermissionRecord permissionRecord = _permissionRepository.Get(x => x.Name == permission);
|
||||
roleRecord.RolesPermissions.Add(new RolesPermissionsRecord { Permission = permissionRecord, Role = roleRecord });
|
||||
_roleEventHandlers.PermissionsChanged(new PermissionAddedContext { Role = roleRecord, Permission = permissionRecord });
|
||||
}
|
||||
TriggerSignal();
|
||||
}
|
||||
@@ -125,7 +134,9 @@ namespace Orchard.Roles.Services {
|
||||
_userRolesRepository.Delete(userRoleRecord);
|
||||
}
|
||||
|
||||
_roleRepository.Delete(GetRole(id));
|
||||
var roleRecord = GetRole(id);
|
||||
_roleRepository.Delete(roleRecord);
|
||||
_roleEventHandlers.Removed(new RoleRemovedContext { Role = roleRecord});
|
||||
TriggerSignal();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user