真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

beego中怎么利用casbin實(shí)現(xiàn)權(quán)限管理-創(chuàng)新互聯(lián)

beego中怎么利用casbin實(shí)現(xiàn)權(quán)限管理,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

為湖南等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及湖南網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、做網(wǎng)站、湖南網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

策略更新包含用戶角色更新,用戶或角色的權(quán)限更新。casbin的rbac_api.go和management_api.go中的方法,似乎分成幾個(gè)“層次”:比如addrole和addpermission,這種專用的;AddNamedPolicy類似這種通用的。

再比如GetPermissionsForUser,它不同于enforce(),后者能夠?qū)崿F(xiàn):user屬于role,user具備訪問data1的權(quán)限,role具備訪問data2的權(quán)限,此時(shí)用enforce(user,data2),結(jié)果是true,但是用GetPermissionsForUser(user),它取不到role的data2。 只能用 先取出user的所有角色,再循環(huán),取出每個(gè)角色具備的權(quán)限。

[plain] view plain copy
roles := e.GetRolesForUser(useridstring) //取出用戶的所有角色  
for , w := range roles {  
roleRes = e.GetPermissionsForUser(w) //取出角色的所有權(quán)限  
for
, k := range roleRes {  
言歸正傳,策略修改總的思路應(yīng)該是這樣:

1.要更新一個(gè)用戶的角色,先把這個(gè)用戶的角色全部刪掉,然后重新添加這個(gè)用戶的角色。

2.更新用戶(或角色)的權(quán)限,先把這個(gè)用戶對(duì)于某個(gè)文件的權(quán)限全部刪掉,再重新添加,道理一樣。

首先是用戶和角色的修改:下圖,點(diǎn)擊用戶,下面顯示這個(gè)用戶具有的角色,并勾選上。

當(dāng)修改勾選后,再保存,后端先用e.DeleteRolesForUser(uid)將這個(gè)用戶的所有角色刪除。再根據(jù)前段選中的傳入后端進(jìn)行循環(huán)添加。

[plain] view plain copy
//添加用戶角色  
//先刪除用戶所有角色  
func (c *RoleController) UserRole() {  
//要支持批量分配角色,循環(huán)用戶id  
uid := c.GetString("uid") //secofficeid  
//先刪除用戶的權(quán)限  
e.DeleteRolesForUser(uid) //數(shù)據(jù)庫(kù)沒有刪掉!  
//刪除數(shù)據(jù)庫(kù)中角色中的用戶  
o := orm.NewOrm()  
qs := o.QueryTable("casbinrule")  
, err := qs.Filter("PType", "g").Filter("v0", uid).Delete()  
if err != nil {  
beego.Error(err)  
}  
//再添加,如果沒有選擇,相當(dāng)于刪除了全部角色  
ids := c.GetString("ids") //roleid  
if ids != "" {  
array := strings.Split(ids, ",")  
for , v1 := range array {  
e.AddGroupingPolicy(uid, "role
"+v1)  
//應(yīng)該用AddRoleForUser()//rbac_api.go  
}

}  
c.Data["json"] = "ok"  
c.ServeJSON()

}  
onlyoffice中對(duì)于某個(gè)文檔的權(quán)限更新

選中一個(gè)文檔,點(diǎn)擊權(quán)限按鈕,顯示這個(gè)文檔的用戶、角色和對(duì)應(yīng)的權(quán)限。

對(duì)于/onlyoffice/26這個(gè)文檔,當(dāng)刪除或增加用戶、角色后,傳到后臺(tái),先用RemoveFilteredPolicy刪掉所有的CasbinRul表中v1為/onlyoffice/26的策略。

然后再根據(jù)傳過來的策略重新存入。因?yàn)檫@里是把用戶和角色放在一個(gè)表格里,所以要做一下區(qū)分,角色id加上role_字樣,以示區(qū)別。

[plain] view plain copy
e.RemoveFilteredPolicy(1, "/onlyoffice/"+strconv.FormatInt(attachments[0].Id, 10))

:= orm.NewOrm()  
qs := o.QueryTable("casbinrule")  
, err = qs.Filter("v1", "/onlyoffice/"+strconv.FormatInt(attachments[0].Id, 10)).Delete()  
if err != nil {  
beego.Error(err)  
}  
/再添加permission  
for , v1 := range rolepermission {  
// beego.Info(v1.Id)  
if v1.Rolenumber != "" { //存儲(chǔ)角色id  
success = e.AddPolicy("role
"+strconv.FormatInt(v1.Id, 10), "/onlyoffice/"+strconv.FormatInt(attachments[0].Id, 10), v1.Permission, suf)  
} else { //存儲(chǔ)用戶id  
success = e.AddPolicy(strconv.FormatInt(v1.Id, 10), "/onlyoffice/"+strconv.FormatInt(attachments[0].Id, 10), v1.Permission, suf)  
}  
//這里應(yīng)該用AddPermissionForUser(),來自casbin\rbac_api.go  
}  
RemovePolicy和RemoveGroupingPolicy可以根據(jù)自己的場(chǎng)景來使用。

上面例子,本來用casbin的方法,刪除了內(nèi)存中的策略,相應(yīng)的它會(huì)自動(dòng)刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù),但是暫時(shí)解決不了,導(dǎo)致數(shù)據(jù)庫(kù)的數(shù)據(jù)不會(huì)自動(dòng)刪除,所以分別添加了一段代碼,用于刪除數(shù)據(jù)庫(kù)數(shù)據(jù)。

casbin用于判斷用戶的的權(quán)限是很方便的。但由于場(chǎng)景很多,比如有時(shí)候要顯示一個(gè)登錄用戶對(duì)各個(gè)資源的的權(quán)限(下圖):

有時(shí)管理員要知道一個(gè)資源所有的用戶和角色,并對(duì)應(yīng)擁有的權(quán)限,如下圖。

還有個(gè)幾個(gè)常見的問題:

1.用戶的權(quán)限permission(action)用1、2、3、4來表示還是用get,post,……因?yàn)橛袝r(shí)候要分等級(jí)和優(yōu)先,如果再加一個(gè)字段不一定需要。比如,對(duì)于一個(gè)文檔,全部權(quán)限規(guī)定為1,評(píng)論為2,只讀為3,不允許為4。設(shè)置權(quán)限的時(shí)候,直接給這個(gè)用戶設(shè)置權(quán)限為只讀3,而這個(gè)用戶屬于角色role,這個(gè)role對(duì)這個(gè)文檔權(quán)限是1,那這個(gè)用戶應(yīng)該是大權(quán)限優(yōu)先。所以用1234比較合適,轉(zhuǎn)成int后可以做比對(duì),取最小的。

2.casbin對(duì)于admin應(yīng)該沒有特殊的處理吧,和普通角色一樣來設(shè)置吧。

3.另外casbin對(duì)于ip區(qū)段支持。這個(gè)我以前還在網(wǎng)上找了一段ip區(qū)段處理的代碼,好像是某個(gè)ip掃描器代碼,先把區(qū)段變成一個(gè)個(gè)ip,對(duì)應(yīng)端口號(hào),然后寫入map,在內(nèi)存中。竟然類似casbin的方式。

接下來有個(gè)不成熟的想法:把casbin的example里的conf和csv一一對(duì)應(yīng)地放到一個(gè)文件中,加上注釋,可能的話配上增刪改等方法。這樣方便初學(xué)者能夠直接進(jìn)入例子,或者自己的場(chǎng)景能直接在這里找到例子。另外就是一些casbin的思想,我都是東拼西湊理解的,并非代表官方思路,它的處理手段背后為啥要這樣?

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


當(dāng)前標(biāo)題:beego中怎么利用casbin實(shí)現(xiàn)權(quán)限管理-創(chuàng)新互聯(lián)
URL地址:http://weahome.cn/article/ppigs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部