diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs index f0deee611..5f1e4489e 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using JetBrains.Annotations; using Orchard.ContentManagement.Drivers; using Orchard.Data; @@ -88,5 +89,35 @@ namespace Orchard.Roles.Drivers { private static UserRolesViewModel BuildEditorViewModel(UserRolesPart userRolesPart) { return new UserRolesViewModel { User = userRolesPart.As(), UserRoles = userRolesPart }; } + + protected override void Importing(UserRolesPart part, ContentManagement.Handlers.ImportContentContext context) { + var roles = context.Attribute(part.PartDefinition.Name, "Roles"); + if(string.IsNullOrEmpty(roles)) { + return; + } + + var userRoles = roles.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries); + + // create new roles + foreach (var role in userRoles) { + var roleRecord = _roleService.GetRoleByName(role); + + // create the role if it doesn't already exist + if (roleRecord == null) { + _roleService.CreateRole(role); + } + } + + var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.UserId == part.ContentItem.Id).ToList(); + var currentRoleRecords = currentUserRoleRecords.Select(x => x.Role).ToList(); + var targetRoleRecords = userRoles.Select(x => _roleService.GetRoleByName(x)).ToList(); + foreach (var addingRole in targetRoleRecords.Where(x => !currentRoleRecords.Contains(x))) { + _userRolesRepository.Create(new UserRolesPartRecord { UserId = part.ContentItem.Id, Role = addingRole }); + } + } + + protected override void Exporting(UserRolesPart part, ContentManagement.Handlers.ExportContentContext context) { + context.Element(part.PartDefinition.Name).SetAttributeValue("Roles", string.Join(",", part.Roles)); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj b/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj index 4402468ba..93a040683 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj +++ b/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj @@ -18,6 +18,7 @@ 3.5 + false true @@ -47,6 +48,8 @@ False ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll + +