From 615b0d59ddca2fd2098a321ed5ccb472650204e7 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 8 Jul 2013 12:02:55 -0700 Subject: [PATCH] #19713: Adding identity resolvers for Layers and Users Work Item: 19713 --HG-- branch : 1.x --- .../Orchard.Users/Orchard.Users.csproj | 1 + .../Services/UserResolverSelector.cs | 40 ++++++++++++++++++ .../Orchard.Widgets/Orchard.Widgets.csproj | 1 + .../Services/LayerResolverSelector.cs | 41 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index a7de95fd7..7878803b5 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -79,6 +79,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs new file mode 100644 index 000000000..1c6feb7c5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Users.Models; + +namespace Orchard.Users.Services { + public class UserResolverSelector : IIdentityResolverSelector { + private readonly IContentManager _contentManager; + + public UserResolverSelector(IContentManager contentManager) { + _contentManager = contentManager; + } + + public IdentityResolverSelectorResult GetResolver(ContentIdentity contentIdentity) { + if (contentIdentity.Has("User.UserName")) { + return new IdentityResolverSelectorResult { + Priority = 0, + Resolve = ResolveIdentity + }; + } + + return null; + } + + private IEnumerable ResolveIdentity(ContentIdentity identity) { + var identifier = identity.Get("User.UserName"); + + if (identifier == null) { + return null; + } + + var comparer = new ContentIdentity.ContentIdentityEqualityComparer(); + return _contentManager + .Query() + .Where(p => p.UserName == identifier) + .List() + .Where(c => comparer.Equals(identity, _contentManager.GetItemMetadata(c).Identity)); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index 0a4534ae1..e357b8a46 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -85,6 +85,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs new file mode 100644 index 000000000..1324e1007 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Core.Common.Models; +using Orchard.Widgets.Models; + +namespace Orchard.Widgets.Services { + public class LayerResolverSelector : IIdentityResolverSelector { + private readonly IContentManager _contentManager; + + public LayerResolverSelector(IContentManager contentManager) { + _contentManager = contentManager; + } + + public IdentityResolverSelectorResult GetResolver(ContentIdentity contentIdentity) { + if (contentIdentity.Has("Layer.LayerName")) { + return new IdentityResolverSelectorResult { + Priority = 0, + Resolve = ResolveIdentity + }; + } + + return null; + } + + private IEnumerable ResolveIdentity(ContentIdentity identity) { + var identifier = identity.Get("Layer.LayerName"); + + if (identifier == null) { + return null; + } + + var comparer = new ContentIdentity.ContentIdentityEqualityComparer(); + return _contentManager + .Query() + .Where(p => p.Name == identifier) + .List() + .Where(c => comparer.Equals(identity, _contentManager.GetItemMetadata(c).Identity)); + } + } +} \ No newline at end of file