GRABC beego框架的RABC外掛
最近寫的一個許可權管理外掛,歡迎大家來吐槽~~
GRABC
GRABC 是一個beego許可權管理外掛,外掛分為路由、許可權、角色。將路由分配給許可權,許可權授給角色,角色授給使用者~~
安裝
go get github.com/codyi/grabc
配置
第一步:在你專案中的資料庫中匯入rabc.sql,生成對應資料表
第二步:在專案中引入grabc庫(可以在專案中的main.go或router.go中引入)
//引入grabc庫
import "github.com/codyi/grabc"
引入之後,在引入的router.go或main.go中新增如下配置
func init() {
//將路由註冊到grabc,用於反射出對應的網址
grabc.RegisterController(& controllers.SiteController{})
grabc.RegisterController(&controllers.UserController{})
//註冊使用者系統模型到grabc,用於使用者ID和grabc外掛繫結
//注意:註冊的這個使用者模型,需要實現IUserModel中的方法
grabc.RegisterUserModel(&models.User{})
//增加忽律許可權檢查的頁面
grabc.AppendIgnoreRoute("site", "login")
//403頁面地址註冊到grabc中,用於grabc外掛禁止許可權的頁面跳轉
grabc.Http_403("/site/nopermission")
//設定模板,為了讓grabc更具有通用性,可以設定模板
//目前設定模板只支援傳入模板的內容
grabc.SetLayout(libs.Grabc_layout, nil)
}
新增好上面的配置之後,剩下就是在controller中增加許可權判了,個人建議做一個BaseController,然後每個controller都繼承這個base,然後在BaseController中的Prepare方法中增加grabc的許可權檢查~~
//註冊當前登入的使用者,注意:user需要繼承IUserIdentify介面
grabc.RegisterIdentify(user)
if !grabc.CheckAccess(this.controllerName, this.actionName) {
this.redirect(this.URLFor("SiteController.NoPermission"))
}
到此grabc的功能都加完了,是不是很簡單~~~
注意:增加完許可權判斷之後,會發現很多頁面都不能訪問了,那麼就在忽律許可權中增加如下配置
grabc.AppendIgnoreRoute("*", "*")
以上配置將會忽律所有的許可權檢查,這時候需要去/route/index中增加路由,然後新增許可權,角色和使用者分配,都配置好之後,就可以將grabc.AppendIgnoreRoute("*", "*")程式碼刪掉,然後重啟專案~~許可權起作用了
介面說明
IUserModel介面
//用於定義使用者model
type IUserModel interface {
//使用者列表返回可用使用者的id和姓名
//引數:pageIndex 分頁的頁數
//引數:pageCount 每頁顯示的使用者數量
//返回值:userList [使用者ID]使用者姓名,使用者列表展示
//返回值:totalNum 全部的使用者數目,用於計算分頁的數量
//返回值:err
UserList(pageIndex, pageCount int) (userList map[int]string, totalNum int, err error)
//根據使用者ID獲取使用者姓名
FindNameById(id int) string
}
IUserIdentify介面
type IUserIdentify interface {
GetId() int //返回當前登入使用者的ID
}
注意
grabc對註冊的控制器會進行反射,然後獲取每個controller的名稱和controller內的公共方法,由於每個controller都繼承了beego.Controller,在獲取controller下的方法名稱時,會將beego.Controller繼承的方法也會獲取到,所以目前還不能區分出方法名到底是beego和使用者自己定義的,所以grabc將beego繼承的方法都進行了忽律,如果在route掃描中,沒有找到自定義的方法,可以在controller中增加如下方法,進行方法返回~~
func (this *SiteController) RABCMethods() []string {
return []string{"Get", "Post"}
}
grabc的詳細例子:github.com/codyi/grabc_example
相關文章
- RePlugin外掛化框架的學習Plugin框架
- Beego 框架巔峰之路Go框架
- 白話外掛框架原理框架
- 蘋果swift 外掛化框架蘋果Swift框架
- Android外掛化——VirtualAPK外掛框架接入專案AndroidAPK框架
- bo 框架之 beego 框架 model curd框架Go
- beego框架程式碼分析Go框架
- [beego新手入門]基於web框架-beego的RESTful API的構建之旅GoWeb框架RESTAPI
- 外掛化知識梳理(2) Small 框架之如何引入公共庫外掛框架
- 外掛化知識梳理(1) Small 框架之如何引入應用外掛框架
- 外掛化知識梳理(4) Small 框架之如何實現外掛更新框架
- 一個.NET Core下的開源外掛框架框架
- Rafy 框架 - 外掛級別的擴充套件點框架套件
- YII框架 外掛引入問題,手動引入 redis外掛, class "yii\redis\Cache".框架Redis
- 安卓外掛化框架Shadow原理分析安卓框架
- Android 外掛框架機制之SmallAndroid框架
- 基於SPI的增強式外掛框架設計框架
- 外掛如何呼叫本外掛的View?View
- 外掛化知識梳理(5) Small 框架之如何不將外掛打包到宿主中框架
- fastadmin的【外掛管理】外掛使用教程AST
- 初次使用EasyUI框架外掛遇到的問題及總結UI框架
- HtmlWebpackPlugin外掛和HtmlWebpackInlineSourcePlugin外掛的使用HTMLWebPlugininline
- Android 外掛化框架 DynamicLoadApk 原始碼分析Android框架APK原始碼
- Android外掛化原理分析(基於Neptune框架)Android框架
- Android 外掛框架機制之預熱篇Android框架
- 從零開始寫Java Web框架——maven 外掛JavaWeb框架Maven
- Android 外掛化框架 DynamicLoadApk 原始碼解析Android框架APK原始碼
- oc的外掛
- vim外掛的安裝方式 -- vim註釋外掛和doxygen函式註釋生成外掛-ctrlp外掛-tabular等號對齊 外掛...函式
- Beego框架學習--(核心:資料互動)Go框架
- 【曹工雜談】說說Maven框架和外掛的契約Maven框架
- fusionjs uber開源的通用web外掛化開發框架JSWeb框架
- [外掛擴充套件]書架外掛(新外掛後臺)套件
- 外掛 檔案上傳外掛 ajaxfileupload.js外掛JS
- PHP外掛系統的實現(七):外掛案例PHP
- Beego:簡約 & 強大並存的 Go 應用框架Go框架
- Beego框架的一條神祕日誌引發的思考Go框架
- 外掛