diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs b/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs index 628b4b177..7bfa06e5a 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs +++ b/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs @@ -16,17 +16,22 @@ namespace Orchard.Roles.Services { private readonly IRepository _roleRepository; private readonly IRepository _permissionRepository; + private readonly IRepository _userRolesRepository; private readonly IEnumerable _permissionProviders; private readonly ICacheManager _cacheManager; private readonly ISignals _signals; - public RoleService(IRepository roleRepository, - IRepository permissionRepository, - IEnumerable permissionProviders, - ICacheManager cacheManager, - ISignals signals) { + public RoleService( + IRepository roleRepository, + IRepository permissionRepository, + IRepository userRolesRepository, + IEnumerable permissionProviders, + ICacheManager cacheManager, + ISignals signals + ) { _roleRepository = roleRepository; _permissionRepository = permissionRepository; + _userRolesRepository = userRolesRepository; _permissionProviders = permissionProviders; _cacheManager = cacheManager; _signals = signals; @@ -111,6 +116,12 @@ namespace Orchard.Roles.Services { } public void DeleteRole(int id) { + + var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.Role.Id == id); + foreach(var userRoleRecord in currentUserRoleRecords) { + _userRolesRepository.Delete(userRoleRecord); + } + _roleRepository.Delete(GetRole(id)); TriggerSignal(); }