diff --git a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs index 34aeda707a..a43ab5be91 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs +++ b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Localization; @@ -138,7 +139,7 @@ namespace Volo.BloggingTestApp .GetRequiredService() .SeedAsync( "1q2w3E*", - IdentityPermissions.GetAll()//.Union(BlogPermissions.GetAll()) //TODO: Define blog permissions + IdentityPermissions.GetAll().Union(BloggingPermissions.GetAll()) ); }); } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs index 845d57b6f2..f246b051d1 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.Modularity; namespace Volo.Blogging @@ -8,6 +9,11 @@ namespace Volo.Blogging { public override void ConfigureServices(IServiceCollection services) { + services.Configure(options => + { + options.DefinitionProviders.Add(); + }); + services.AddAssemblyOf(); } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissionDefinitionProvider.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissionDefinitionProvider.cs new file mode 100644 index 0000000000..0fb9b5b707 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissionDefinitionProvider.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; +using Volo.Blogging.Localization; + +namespace Volo.Blogging +{ + public class BloggingPermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var bloggingGroup = context.AddGroup(BloggingPermissions.GroupName, L("Permission:Blogging")); + + var blogs = bloggingGroup.AddPermission(BloggingPermissions.Blogs.Default, L("Permission:BlogManagement")); + blogs.AddChild(BloggingPermissions.Blogs.Update, L("Permission:Edit")); + blogs.AddChild(BloggingPermissions.Blogs.Delete, L("Permission:Delete")); + blogs.AddChild(BloggingPermissions.Blogs.Create, L("Permission:Delete")); + + var posts = bloggingGroup.AddPermission(BloggingPermissions.Posts.Default, L("Permission:PostManagement")); + posts.AddChild(BloggingPermissions.Posts.Update, L("Permission:Edit")); + posts.AddChild(BloggingPermissions.Posts.Delete, L("Permission:Delete")); + posts.AddChild(BloggingPermissions.Posts.Create, L("Permission:Delete")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissions.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissions.cs new file mode 100644 index 0000000000..ab86e7c0a0 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissions.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Blogging +{ + public class BloggingPermissions + { + public const string GroupName = "Blogging"; + + public static class Blogs + { + public const string Default = GroupName + ".Blog"; + public const string Delete = Default + ".Delete"; + public const string Update = Default + ".Update"; + public const string Create = Default + ".Create"; + } + + public static class Posts + { + public const string Default = GroupName + ".Post"; + public const string Delete = Default + ".Delete"; + public const string Update = Default + ".Update"; + public const string Create = Default + ".Create"; + } + + public static string[] GetAll() + { + return new[] + { + GroupName, + Blogs.Default, + Blogs.Delete, + Blogs.Update, + Blogs.Create, + Posts.Default, + Posts.Delete, + Posts.Update, + Posts.Create + }; + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index 7c02d417e7..c08995f4ba 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -4,10 +4,12 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using System.Collections.Generic; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Users; namespace Volo.Blogging.Posts { + [Authorize(BloggingPermissions.Posts.Default)] public class PostAppService : ApplicationService, IPostAppService { private readonly IPostRepository _postRepository; @@ -39,6 +41,7 @@ namespace Volo.Blogging.Posts return ObjectMapper.Map(post); } + [Authorize(BloggingPermissions.Posts.Update)] public async Task UpdateAsync(Guid id, UpdatePostDto input) { var post = await _postRepository.GetAsync(id); @@ -51,10 +54,11 @@ namespace Volo.Blogging.Posts return ObjectMapper.Map(post); } + [Authorize(BloggingPermissions.Posts.Create)] public async Task CreateAsync(CreatePostDto input) { var post = new Post( - GuidGenerator.Create(), + id: GuidGenerator.Create(), blogId: input.BlogId, creatorId: CurrentUser.GetId(), title: input.Title diff --git a/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs b/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs index 368d038a7a..9047bc2a15 100644 --- a/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs +++ b/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs @@ -29,14 +29,13 @@ namespace Volo.Blogging options.FileSets.AddEmbedded("Volo.Blogging"); }); - services.Configure(options => { //TODO: Make configurable! options.Conventions.AddPageRoute("/Blog/Posts/Index", "blog/{blogShortName}"); options.Conventions.AddPageRoute("/Blog/Posts/Detail", "blog/{blogShortName}/{postTitle}"); - options.Conventions.AddPageRoute("/Blog/Posts/Edit", "blog/{blogShortName}/manage/{postId}"); - options.Conventions.AddPageRoute("/Blog/Posts/New", "blog/{blogShortName}/manage/new"); + options.Conventions.AddPageRoute("/Blog/Posts/Edit", "blog/{blogShortName}/posts/edit/{postId}"); + options.Conventions.AddPageRoute("/Blog/Posts/New", "blog/{blogShortName}/posts/new"); }); services.AddAssemblyOf(); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml index 601af19e39..b594483797 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml @@ -4,28 +4,23 @@ @{ } -@using (Html.BeginForm(FormMethod.Post)) -{ -
- -
- -
-
-
- -
- -
-
- - -
-
- +
+ + + +
+ +
-
-} \ No newline at end of file + +