Skip to content

Commit

Permalink
sixth
Browse files Browse the repository at this point in the history
  • Loading branch information
xyfy committed Dec 15, 2022
1 parent b8dd83e commit 4bae261
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 35 deletions.
Expand Up @@ -2,19 +2,23 @@
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;

namespace Acme.BookStore.Permissions;

public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider
namespace Acme.BookStore.Permissions
{
public override void Define(IPermissionDefinitionContext context)
public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider
{
var myGroup = context.AddGroup(BookStorePermissions.GroupName);
//Define your own permissions here. Example:
//myGroup.AddPermission(BookStorePermissions.MyPermission1, L("Permission:MyPermission1"));
}
public override void Define(IPermissionDefinitionContext context)
{
var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L("Permission:BookStore"));

private static LocalizableString L(string name)
{
return LocalizableString.Create<BookStoreResource>(name);
var booksPermission = bookStoreGroup.AddPermission(BookStorePermissions.Books.Default, L("Permission:Books"));
booksPermission.AddChild(BookStorePermissions.Books.Create, L("Permission:Books.Create"));
booksPermission.AddChild(BookStorePermissions.Books.Edit, L("Permission:Books.Edit"));
booksPermission.AddChild(BookStorePermissions.Books.Delete, L("Permission:Books.Delete"));
}

private static LocalizableString L(string name)
{
return LocalizableString.Create<BookStoreResource>(name);
}
}
}
Expand Up @@ -4,6 +4,11 @@ public static class BookStorePermissions
{
public const string GroupName = "BookStore";

//Add your own permission names. Example:
//public const string MyPermission1 = GroupName + ".MyPermission1";
}
public static class Books
{
public const string Default = GroupName + ".Books";
public const string Create = Default + ".Create";
public const string Edit = Default + ".Edit";
public const string Delete = Default + ".Delete";
}
}
9 changes: 7 additions & 2 deletions src/Acme.BookStore.Application/Books/BookAppService.cs
@@ -1,4 +1,5 @@
using System;
using Acme.BookStore.Permissions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
Expand All @@ -17,7 +18,11 @@ public class BookAppService :
public BookAppService(IRepository<Book, Guid> repository)
: base(repository)
{

GetPolicyName = BookStorePermissions.Books.Default;
GetListPolicyName = BookStorePermissions.Books.Default;
CreatePolicyName = BookStorePermissions.Books.Create;
UpdatePolicyName = BookStorePermissions.Books.Edit;
DeletePolicyName = BookStorePermissions.Books.Delete;
}
}
}
}
Expand Up @@ -28,6 +28,11 @@
"Enum:BookType.ScienceFiction": "Science fiction",
"Enum:BookType.Poetry": "Poetry",
"BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?",
"SuccessfullyDeleted": "Successfully deleted!"
"SuccessfullyDeleted": "Successfully deleted!",
"Permission:BookStore": "Book Store",
"Permission:Books": "Book Management",
"Permission:Books.Create": "Creating new books",
"Permission:Books.Edit": "Editing the books",
"Permission:Books.Delete": "Deleting the books"
}
}
15 changes: 12 additions & 3 deletions src/Acme.BookStore.Web/BookStoreWebModule.cs
Expand Up @@ -37,6 +37,8 @@
using Volo.Abp.UI;
using Volo.Abp.UI.Navigation;
using Volo.Abp.VirtualFileSystem;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Acme.BookStore.Permissions;

namespace Acme.BookStore.Web;

Expand Down Expand Up @@ -68,7 +70,7 @@ public override void PreConfigureServices(ServiceConfigurationContext context)
typeof(BookStoreWebModule).Assembly
);
});

PreConfigure<OpenIddictBuilder>(builder =>
{
builder.AddValidation(options =>
Expand All @@ -94,8 +96,15 @@ public override void ConfigureServices(ServiceConfigurationContext context)
ConfigureNavigationServices();
ConfigureAutoApiControllers();
ConfigureSwaggerServices(context.Services);

Configure<RazorPagesOptions>(options =>
{
options.Conventions.AuthorizePage("/Books/Index", BookStorePermissions.Books.Default);
options.Conventions.AuthorizePage("/Books/CreateModal", BookStorePermissions.Books.Create);
options.Conventions.AuthorizePage("/Books/EditModal", BookStorePermissions.Books.Edit);
});
}

private void ConfigureAuthentication(ServiceConfigurationContext context)
{
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
Expand All @@ -122,7 +131,7 @@ private void ConfigureBundles()
);
});
}

private void ConfigureAutoMapper()
{
Configure<AbpAutoMapperOptions>(options =>
Expand Down
31 changes: 19 additions & 12 deletions src/Acme.BookStore.Web/Menus/BookStoreMenuContributor.cs
@@ -1,6 +1,7 @@
using System.Threading.Tasks;
using Acme.BookStore.Localization;
using Acme.BookStore.MultiTenancy;
using Acme.BookStore.Permissions;
using Volo.Abp.Identity.Web.Navigation;
using Volo.Abp.SettingManagement.Web.Navigation;
using Volo.Abp.TenantManagement.Web.Navigation;
Expand Down Expand Up @@ -33,19 +34,25 @@ private async Task ConfigureMainMenuAsync(MenuConfigurationContext context)
order: 0
)
);
context.Menu.AddItem(
new ApplicationMenuItem(

var bookStoreMenu = new ApplicationMenuItem(
"BooksStore",
l["Menu:BookStore"],
icon: "fa fa-book"
).AddItem(
new ApplicationMenuItem(
"BooksStore.Books",
l["Menu:Books"],
url: "/Books"
)
)
);
l["Menu:BookStore"],
icon: "fa fa-book"
);

context.Menu.AddItem(bookStoreMenu);

//CHECK the PERMISSION
if (await context.IsGrantedAsync(BookStorePermissions.Books.Default))
{
bookStoreMenu.AddItem(new ApplicationMenuItem(
"BooksStore.Books",
l["Menu:Books"],
url: "/Books"
));
}

if (MultiTenancyConsts.IsEnabled)
{
administration.SetSubItemOrder(TenantManagementMenuNames.GroupName, 1);
Expand Down
16 changes: 13 additions & 3 deletions src/Acme.BookStore.Web/Pages/Books/Index.cshtml
@@ -1,21 +1,31 @@
@page
@using Acme.BookStore.Localization
@using Acme.BookStore.Permissions
@using Acme.BookStore.Web.Pages.Books
@using Microsoft.AspNetCore.Authorization
@using Microsoft.Extensions.Localization
@model IndexModel
@inject IStringLocalizer<BookStoreResource> L
@inject IAuthorizationService AuthorizationService
@section scripts
{
<abp-script src="/Pages/Books/Index.js" />
<abp-script src="/Pages/Books/Index.js"/>
}

<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_6">
<abp-card-title>@L["Books"]</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-end">
<abp-button id="NewBookButton" text="@L["NewBook"].Value" icon="plus" button-type="Primary" />
<abp-column size-md="_6" class="text-right">
@if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create))
{
<abp-button id="NewBookButton"
text="@L["NewBook"].Value"
icon="plus"
button-type="Primary"/>
}
</abp-column>
</abp-row>
</abp-card-header>
Expand Down
4 changes: 4 additions & 0 deletions src/Acme.BookStore.Web/Pages/Books/index.js
Expand Up @@ -20,12 +20,16 @@ $(function () {
items: [
{
text: l('Edit'),
visible: abp.auth.isGranted(
'BookStore.Books.Edit'
), //CHECK for the PERMISSION
action: function (data) {
editModal.open({ id: data.record.id });
},
},
{
text: l('Delete'),
visible: abp.auth.isGranted('BookStore.Books.Delete'),
confirmMessage: function (data) {
return l(
'BookDeletionConfirmationMessage',
Expand Down

0 comments on commit 4bae261

Please sign in to comment.