首先,讓我們定義一個規則:使用者只能訪問自己建立的文章。
facades.Gate.Define("update-post", func(ctx context.Context, arguments map[string]any) *access.Response {
user := ctx.Value("user").(models.User)
post := arguments["post"].(models.Post)
if user.ID == post.UserID {
return access.NewAllowResponse()
} else {
return access.NewDenyResponse("error")
}
})
然後判斷單個許可權:
if facades.Gate.Allows("update-post", map[string]any{
"post": post,
}) {
// todo
}
你也可以同時判斷多個許可權:
if facades.Gate.Any([]string{"update-post", "delete-post"}, map[string]any{
"post": post,
}) {
// 使用者可以提交update或delete...
}
if facades.Gate.None([]string{"update-post", "delete-post"}, map[string]any{
"post": post,
}) {
// 使用者不可以提交update和delete...
}
你甚至可以定義 Before
與 After
進行授權前後的攔截,詳見文件。
Over, 就是如此簡單!
關於 Goravel
Goravel 是一個功能完備、具有良好擴充套件能力的 Web 應用程式框架。作為一個起始腳手架幫助 Golang 開發者快速構建自己的應用。
框架風格與 Laravel 保持一致,讓 PHPer 不用學習新的框架,也可以愉快的玩轉 Golang!致敬 Laravel!
Welcome star, PR and issues!
本作品採用《CC 協議》,轉載必須註明作者和本文連結