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
相關文章
- bo 框架之 beego 框架 model curd框架Go
- beego框架程式碼分析Go框架
- Beego 框架巔峰之路Go框架
- 蘋果swift 外掛化框架蘋果Swift框架
- [beego新手入門]基於web框架-beego的RESTful API的構建之旅GoWeb框架RESTAPI
- 一個.NET Core下的開源外掛框架框架
- YII框架 外掛引入問題,手動引入 redis外掛, class "yii\redis\Cache".框架Redis
- Android 外掛化框架 DynamicLoadApk 原始碼分析Android框架APK原始碼
- 安卓外掛化框架Shadow原理分析安卓框架
- 基於SPI的增強式外掛框架設計框架
- sumbline text2的node.js的ejs框架外掛Node.js框架
- 外掛如何呼叫本外掛的View?View
- HtmlWebpackPlugin外掛和HtmlWebpackInlineSourcePlugin外掛的使用HTMLWebPlugininline
- fastadmin的【外掛管理】外掛使用教程AST
- Android外掛化原理分析(基於Neptune框架)Android框架
- 初次使用EasyUI框架外掛遇到的問題及總結UI框架
- fusionjs uber開源的通用web外掛化開發框架JSWeb框架
- Beego框架學習--(核心:資料互動)Go框架
- 從零開始寫Java Web框架——maven 外掛JavaWeb框架Maven
- Beego框架的一條神祕日誌引發的思考Go框架
- 【曹工雜談】說說Maven框架和外掛的契約Maven框架
- Beego:簡約 & 強大並存的 Go 應用框架Go框架
- Springboot+Mybatis+Mybatisplus 框架中增加自定義分頁外掛和sql 佔位符修改外掛Spring BootMyBatis框架SQL
- [外掛擴充套件]書架外掛(新外掛後臺)套件
- PHP外掛系統的實現(七):外掛案例PHP
- SVN外掛和Tomcat外掛地址Tomcat
- [外掛擴充套件]Ping外掛套件
- 外掛式換膚框架搭建 setContentView原始碼閱讀框架View原始碼
- 推薦一個 ASP.NET Core 的輕量級外掛框架ASP.NET框架
- 外掛
- [外掛擴充套件]簡單的IP記錄外掛套件
- PHP外掛系統的實現(五):觸發外掛PHP
- sbt的assembly外掛
- 好用的chrome外掛Chrome
- mybatis的外掛:mapperMyBatisAPP
- burp外掛的使用
- jQuery的外掛列表jQuery
- Maven的常用外掛Maven
- IDEA好用的外掛Idea