diff --git a/Constants/XContentServiceConstants.cs b/Constants/XContentServiceConstants.cs index e71b3a3..f347b09 100644 --- a/Constants/XContentServiceConstants.cs +++ b/Constants/XContentServiceConstants.cs @@ -1,3 +1,5 @@ +using xContentService.Models.Entities; + namespace xContentService.Constants { public struct XContentServiceConstants @@ -24,6 +26,12 @@ namespace xContentService.Constants // EF Repositories Helper Extensions ... public const string GetXContentEFRepositoryDescriptor = "GetXContentEFRepositoryDescriptor"; + // + // Custome Constants ... + public const string XAdminRole = "admin"; + + public const string XContentTagProvided = nameof(XContent); + public const string XContentTitleIdentifier = "CntnT"; public const string XContentDescriptionIdentifier = "CntnD"; } diff --git a/DI/XDIHelperExtensions.cs b/DI/XDIHelperExtensions.cs index 990127e..5e0a563 100644 --- a/DI/XDIHelperExtensions.cs +++ b/DI/XDIHelperExtensions.cs @@ -210,6 +210,7 @@ namespace xContentService.DI ); // + // Resource Providers ... services.Add( new ServiceDescriptor(typeof(IXContentTitleResourceProvider), typeof(XContentTitleResourceProvider), lifeTime) ); @@ -218,6 +219,7 @@ namespace xContentService.DI ); // + // Enrichers ... services.Add( new ServiceDescriptor(typeof(IXContentEnricher), typeof(XContentEnricher), lifeTime) ); @@ -235,16 +237,19 @@ namespace xContentService.DI ); // - // Register Additional Service ... - // services.Add( - // new ServiceDescriptor(typeof(IXContentTagProvider), typeof(XContentTagProvider), lifeTime) - // ); - // services.Add( - // new ServiceDescriptor(typeof(IXContentTagProvided), typeof(XContentTagProvided), lifeTime) - // ); - // services.Add( - // new ServiceDescriptor(typeof(IXContentProvider), typeof(XContentProvider), lifeTime) - // ); + // Tags ... + services.Add( + new ServiceDescriptor(typeof(IXContentTagProvider), typeof(XContentTagProvider), lifeTime) + ); + services.Add( + new ServiceDescriptor(typeof(IXContentTagProvided), typeof(XContentTagProvided), lifeTime) + ); + + // + // Provider ... + services.Add( + new ServiceDescriptor(typeof(IXContentProvider), typeof(XContentProvider), lifeTime) + ); // Log("Service Regitration Succeed ..."); diff --git a/Interfaces/IXContentTagProvided.cs b/Interfaces/IXContentTagProvided.cs new file mode 100644 index 0000000..752645f --- /dev/null +++ b/Interfaces/IXContentTagProvided.cs @@ -0,0 +1,11 @@ +using System; +using xTagService.Interfaces; +using xContentService.Models.Dtos; +using xContentService.Providers.Dtos; +using xContentService.Models.Entities; + +namespace xContentService.Interfaces +{ + public interface IXContentTagProvided : IXTagProvided + { } +} \ No newline at end of file diff --git a/Interfaces/IXContentTagProvider.cs b/Interfaces/IXContentTagProvider.cs new file mode 100644 index 0000000..a438fb7 --- /dev/null +++ b/Interfaces/IXContentTagProvider.cs @@ -0,0 +1,8 @@ +using System; +using xTagService.Interfaces; + +namespace xContentService.Interfaces +{ + public interface IXContentTagProvider : IXBaseTagProvider + { } +} \ No newline at end of file diff --git a/Providers/XContentTagProvided.cs b/Providers/XContentTagProvided.cs new file mode 100644 index 0000000..dc32be9 --- /dev/null +++ b/Providers/XContentTagProvided.cs @@ -0,0 +1,56 @@ +using System; +using xCommons.Extensions; +using xTagService.Providers; +using xIdentityModels.Models; +using xContentService.Constants; +using xContentService.Interfaces; +using xContentService.Models.Dtos; +using xContentService.Providers.Dtos; +using xContentService.Interfaces.Dtos; +using xContentService.Models.Entities; + +namespace xContentService.Providers +{ + public class XContentTagProvided : XBaseTagProvided, IXContentTagProvided + { + public XContentTagProvided( + IXContentTagProvider tagProvider, + IXContentServiceProvider provider + ) : base( + provider: provider, + tagProvider: tagProvider, + permittedRoles: [XContentServiceConstants.XAdminRole] + ) + { } + + public override bool IsOwned( + XContent item, + XUserClaimsInfoDto userInfo + ) + { + // + var result = + !item.IsNullOrDefault() && + !userInfo.IsNullOrDefault() && + item.OwnerId == userInfo.UserId; + + // + return result; + } + + public override bool IsOwned( + XContentDto item, + XUserClaimsInfoDto userInfo + ) + { + // + var result = + !item.IsNullOrDefault() && + !userInfo.IsNullOrDefault() && + item.OwnerId == userInfo.UserId; + + // + return result; + } + } +} \ No newline at end of file diff --git a/Providers/XContentTagProvider.cs b/Providers/XContentTagProvider.cs new file mode 100644 index 0000000..59e2393 --- /dev/null +++ b/Providers/XContentTagProvider.cs @@ -0,0 +1,19 @@ +using System; +using xTagService.Providers; +using xContentService.Constants; +using xContentService.Interfaces; +using xTagService.Interfaces.Dtos; + +namespace xContentService.Providers +{ + public class XContentTagProvider : XBaseTagProvider, IXContentTagProvider + { + public XContentTagProvider( + IXTagServiceProvider tagProvider + ) : base( + tagProvider: tagProvider, + providedFor: XContentServiceConstants.XContentTagProvided + ) + { } + } +} \ No newline at end of file