緊接著上一期的內容,繼續對go-admin的一些細節進行決議,
通用的增刪改查方法
在go-admin/common/actions下封裝了通用的增刪改查方法,在對這些方法進行說明前,先移步到另一個檔案夾下go-admin/common/dto/generate.go&type.go
這倆個檔案的內容在整個web請求中都至關重要,首先看
type.go
里面只有倆個介面,根據筆者的實踐這倆個介面的作用應該是這樣的
Index
1、系結查詢引數
2、分頁物體
Control
1、from表單或url實體系結
2、dto轉換【轉換為資料庫物體】
golang中的介面實作總是很難受,沒有強型別的檢查,實作任一介面中的任一方法都算實作了這個介面,這就導致編碼時候很不好回溯誰是誰介面的實作,
generate.go
通過generate.go來對type.go進行分析能夠有一個簡單的認識,
Bind()方法實作的功能是,引數系結到物體ObjectById中,GetId()實作的方法是回傳系結的引數,而這倆個方法就是上面type.go的介面實作,
那么為什么要這么做呢?有什么作用?
這個時候我們把目光就可以放回/common/actions/create.go中
按步驟進行決議
1、首先獲取資料庫實體GetOrm()
2、獲取當前web背景關系IDGenerateMsgIDFromContext()
req := control.Generate()
err = req.Bind(c)

這倆段代碼的理解是重中之重,control是一個介面型別,實作了這個介面的必定是一個Model,且這個物體肯定實作了Generate、GenerateM、Bind方法,我們去找一下在哪里會有對此方法的實作,

go-admin/app/router/任一.go檔案中執行CreateAction并且傳遞引數,引數是每一個路由請求的ViewModel,
那就比較好理解這一層邏輯了,首先在路由定義層面對不同路由的增刪改查方法傳遞viewModel的物體作為后續物體系結的定義,這就有點像是.net mvc編程中控制器方法體形參定義的物體,只是在.net MVC是框架幫你系結好了,而這里需要自己從源頭定義系結,
3、從viewModel轉換成資料庫Dto
4、附上創建人等屬性
5、呼叫資料庫創建方法,根據回傳結果回傳前臺json內容
資料權限檢查
go-admin可以選擇開啟資料權限檢查,開啟后的表現為:
根據控制臺配置的內容,角色擁有不同的權限
- 本部門
- 本部門及以下
- 自己
- 特定
如何理解?就是如果設定了當前角色的資料權限為“自己”,那自己就只能看到且操作自己的記錄,其他的以此類推,
聽著好神奇,那么具體是如何實作的呢?
首先要實作這樣的功能資料庫的表肯定要有一些特定的欄位,如下
-
CreateBy 創建人
-
UpdateBy 修改人
在后臺執行crud指令的時候附加T-sql陳述句,通過不同角色定義的權限配置不同的陳述句,如下所示

p := GetPermissionFromContext(c) //資料權限檢查
db = db.WithContext(c).Scopes(Permission(object.TableName(), p)
Scopes是Gorm的一種用法
Scope 方法基于鏈式操作理論創建的,
使用它,你可以提取一些通用邏輯,寫一些更可用的庫
執行順序
1、獲取通用資料權限檢查
2、呼叫gorm.scopes方法 ,在執行crud操作時候附加權限檢查where條件作為判斷依據,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261235.html
標籤:Go
下一篇:JUnit5學習之一:基本操作
