.NET 雲原生架構師訓練營(許可權系統 系統演示 EntityAccess)–學習筆記
- 2022 年 2 月 24 日
- 筆記
- 【006】.NET 雲原生架構師訓練營
目錄
- 模組拆分
- EntityAccess
模組拆分
EntityAccess
- 實體許可權
- 屬性許可權
實體許可權
創建 student
//localhost:7018/Student/dotnetnb2
獲取 student
//localhost:7018/Student
對 student 的 permission 做一個保護,創建一個 entitiy 的 permission,create 為 true,delete 和 update 為 false
//localhost:7018/Permission/entity
參數
{
"key": "student-entity-create",
"group": "ApplicationDbContext",
"displayName": "student-entity-create",
"description": "新增許可權",
"resources": [
"DotNetNB.WebApplication.Models.Student"
],
"data": {
"entityName": "DotNetNB.WebApplication.Models.Student",
"create": true,
"delete": false,
"members": [
{
"memberName": "Age",
"update": false
}
]
}
}
創建之後獲取一下 permission,可以看到創建的對於 student-entity-create 的一個 action 的 permission
//localhost:7018/Permission
創建完 permission 之後再創建 student 就會拋出 AuthenticationException 異常,未認證
//localhost:7018/Student/dotnetnb2
這是通過 dbcontext 在 SavingChangesAsync 的時候由 Intersect 實現的,因為訪問介面的時候沒有帶上 token
if (!createPermission.Intersect(claimValues).Any())
throw new AuthorizationException();
獲取 token
//localhost:7018/Authentication/login
接著把 token 放到創建 student 請求的 headers 之後,會拋出 AuthorizationException 異常,未授權
//localhost:7018/Student/dotnetnb2
說明已經登錄成功,完成認證,但是沒有相關許可權,因為 token 中沒有包含 student-entity-create 的 permission
為用戶添加 permission,因為 admin 用戶擁有一個 admin 的 role,所以只需要將 permission 添加給 admin 的 role 即可
//localhost:7018/Permission/addtorole?role=admin&permission=student-entity-create
permission 添加之後需要重新獲取 token
//localhost:7018/Authentication/login
解析 token 可以看到包含 student-entity-create 的 permission
使用這個 token 創建 student 就可以創建成功
//localhost:7018/Student/dotnetnb2
獲取所有 student,可以看到多了一個 dotnetnb2
//localhost:7018/Student
但是這個 token 沒有給 delete 的許可權,所以 delete 會拋出 AuthorizationException 異常,未授權
//localhost:7018/Student/dotnetnb2
因為之前的 permission 中 delete 為 false
"delete": false,
需要再添加一個包含 delete 許可權的 permission:student-entity-create-and-delete
//localhost:7018/Permission/entity
參數
{
"key": "student-entity-create-and-delete",
"group": "ApplicationDbContext",
"displayName": "student-entity-create-and-delete",
"description": "新增刪除許可權",
"resources": [
"DotNetNB.WebApplication.Models.Student"
],
"data": {
"entityName": "DotNetNB.WebApplication.Models.Student",
"create": true,
"delete": true,
"members": [
{
"memberName": "Age",
"update": false
}
]
}
}
創建之後獲取一下 permission,可以看到 student-entity-create-and-delete 的 permission
//localhost:7018/Permission
直接授權這個 permission 給用戶 admin
//localhost:7018/Permission/addtouser?username=admin&permission=student-entity-create-and-delete
重新獲取 token
//localhost:7018/Authentication/login
解析 token 看到包含 student-entity-create-and-delete
使用這個 token 刪除 student 就可以成功
//localhost:7018/Student/dotnetnb2
獲取 student,可以發現 dotnetnb2 已經刪除成功了
//localhost:7018/Student
屬性許可權
調用介面修改 student 的 age 屬性,會拋出 AuthenticationException 異常,未認證
//localhost:7018/Student/addAge/dotnetnb
登錄之後使用 token 請求,會拋出 AuthorizationException 異常,未授權
//localhost:7018/Student/addAge/dotnetnb
因為之前添加的 permission 對 age 屬性不可修改
"members": [
{
"memberName": "Age",
"update": false
}
需要新增一個可以修改 age 屬性的 permission
//localhost:7018/Permission/entity
參數
{
"key": "student-entity-all",
"group": "ApplicationDbContext",
"displayName": "student-entity-all",
"description": "全部許可權",
"resources": [
"DotNetNB.WebApplication.Models.Student"
],
"data": {
"entityName": "DotNetNB.WebApplication.Models.Student",
"create": true,
"delete": true,
"members": [
{
"memberName": "Age",
"update": true
}
]
}
}
將該 permission 賦值給 admin,重新獲取 token,再調用介面修改 student 的 age 屬性
//localhost:7018/Student/addAge/dotnetnb
修改成功後再獲取 student,可以看到 dotnetnb 的 age 從 0 變為 1,修改成功
//localhost:7018/Student
GitHub源碼鏈接:
//github.com/MingsonZheng/dotnetnb.security refactor 分支
課程鏈接
//appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。
歡迎轉載、使用、重新發布,但務必保留文章署名 鄭子銘 (包含鏈接: //www.cnblogs.com/MingsonZheng/ ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。
如有任何疑問,請與我聯繫 ([email protected]) 。