Angular UI for Resource Based Permission Management
Based on https://github.com/abpframework/abp/pull/24184 (wait it to be merged)
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"
}
]
}
]
}
4️⃣: "providerNameDisplayName": "Role"
Add resource permissions
- Get provider list:
GET api/permission-management/permissions/resource-provider-key-lookup-services?resourceName=Book
{
"providers": [
{
"name": "U",
"displayName": "User"
},
{
"name": "R",
"displayName": "Role"
}
]
}
- 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"
}
]
}
- 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"
}
]
}
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
}
]
}
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"
]
}
Delete resource permissions
DELETE /api/permission-management/permissions/resource?resourceName=Book&resourceKey=bookid&providerName=U&providerKey=userid
MVC and Blazor PR have been merged.
The demo source code: https://github.com/maliming/AbpResourcePermission