abp icon indicating copy to clipboard operation
abp copied to clipboard

Angular UI for Resource Based Permission Management

Open hikalkan opened this issue 1 month ago • 1 comments

Based on https://github.com/abpframework/abp/pull/24184 (wait it to be merged)

hikalkan avatar Nov 28 '25 09:11 hikalkan

https://github.com/user-attachments/assets/574f89c5-c7ec-4a3f-a48b-c367d5172010

The resource permissions table:

GET api/permission-management/permissions/resource?resourceName=Book&resourceKey=BookId

{
    "permissions": [
        {
            "providerName": "R",
            "providerKey": "admin",
            "providerDisplayName": "admin",
            "providerNameDisplayName": "Role",
            "permissions": [
                {
                    "name": "Acme.BookStore.Books.Book.ChangeName",
                    "displayName": "Change book name"
                },
                {
                    "name": "Acme.BookStore.Books.Book.ChangePrice",
                    "displayName": "Change book price"
                }
            ]
        },
        {
            "providerName": "U",
            "providerKey": "96570a38-2484-2d71-e920-3a1e288e61e5",
            "providerDisplayName": "test",
            "providerNameDisplayName": "User",
            "permissions": [
                {
                    "name": "Acme.BookStore.Books.Book.ChangeName",
                    "displayName": "Change book name"
                },
                {
                    "name": "Acme.BookStore.Books.Book.ChangeType",
                    "displayName": "Change book type"
                },
                {
                    "name": "Acme.BookStore.Books.Book.ChangePrice",
                    "displayName": "Change book price"
                }
            ]
        }
    ]
}
Image

4️⃣: "providerNameDisplayName": "Role"

Image

Add resource permissions

  1. Get provider list:

GET api/permission-management/permissions/resource-provider-key-lookup-services?resourceName=Book

{
    "providers": [
        {
            "name": "U",
            "displayName": "User"
        },
        {
            "name": "R",
            "displayName": "Role"
        }
    ]
}
  1. Query provider key:

GET api/permission-management/permissions/search-resource-provider-keys?resourceName=Book&serviceName=U&page=1

{
    "keys": [
        {
            "providerKey": "e5779a11-ede3-10c5-d049-3a1e03cadc35",
            "providerDisplayName": "maliming"
        },
        {
            "providerKey": "5f93d49a-14b5-5946-4556-3a1dffd2848a",
            "providerDisplayName": "admin"
        }
    ]
}
  1. Permissions definition list:

GET api/permission-management/permissions/resource-definitions?resourceName=Book

{
    "permissions": [
        {
            "name": "ChangeBookName",
            "displayName": "Change book name"
        },
        {
            "name": "ChangeBookType",
            "displayName": "Change book price"
        }
    ]
}
Image

Get current permissions after selecting a key in Create modal

GET api/permission-management/permissions/resource/by-provider?resourceName=book&resourceKey=bookid&providerName=U&providerKey=userid

We need to check the providers array contains the providerName and isGranted is true.

{
    "permissions": [
        {
            "name": "Acme.BookStore.Books.Book.ChangeName",
            "displayName": "Change book name",
            "providers": [
                "R"
            ],
            "isGranted": true
        },
        {
            "name": "Acme.BookStore.Books.Book.ChangeType",
            "displayName": "Change book type",
            "providers": [
                "R"
            ],
            "isGranted": true
        },
        {
            "name": "Acme.BookStore.Books.Book.ChangePrice",
            "displayName": "Change book price",
            "providers": [
                "R"
            ],
            "isGranted": true
        }
    ]
}

Image


Update resource permissions

GET api/permission-management/permissions/resource/by-provider?resourceName=Book&resourceKey=bookId&providerName=U&providerKey=userid

{
    "permissions": [
        {
            "name": "ChangeBookName",
            "displayName": "Change book name",
            "isGranted": true
        },
        {
            "name": "ChangeBookType",
            "displayName": "Change book price",
            "isGranted": true
        }
    ]
}

Permissions states are based on Permissions definition list

PUT api/permission-management/permissions/resource?resourceName=Book&resourceKey=bookid

{
  "ProviderName": "U",
  "ProviderKey": "userid",
  "Permissions": [
    "ChangeBookName"
  ]
}
Image

Delete resource permissions

DELETE /api/permission-management/permissions/resource?resourceName=Book&resourceKey=bookid&providerName=U&providerKey=userid

maliming avatar Dec 09 '25 04:12 maliming

MVC and Blazor PR have been merged.

maliming avatar Dec 15 '25 07:12 maliming

The demo source code: https://github.com/maliming/AbpResourcePermission

maliming avatar Dec 16 '25 01:12 maliming