前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >beego利用casbin进行权限管理——第一节 起步、测试

beego利用casbin进行权限管理——第一节 起步、测试

作者头像
hotqin888
发布2018-09-11 15:04:54
2.5K0
发布2018-09-11 15:04:54
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334508

casbin很好用,支持beego等框架,作者很勤奋,把几乎所有的框架都写了adapter。

补充:经过这么久的使用,我觉得为何要用这个东西,总结有这么几个:

1.用了casbin后,我们自己的项目启动的时候,会读取权限数据库到内存(map),这期间的查询会只是查询内存,不用查数据库。权限的存储和修改,casbin先改内存,然后同步修改数据库。如果自己写,还是比较麻烦的。

2.比如,用户user属于一个角色role,用户user具有一个资源data1的某个权限action1,role也具有另一个资源data2的某个权限action2,那么这个user就同时具备了data1的action1和data2的action2,这是自动在casbin的规则中定义就行了。

3.总的来说还是节约了代码,增删查改都是一行代码搞定。比如下面:

代码语言:javascript
复制
// o := orm.NewOrm()
		// qs := o.QueryTable("casbin_rule")
		// _, err = qs.Filter("PType", "p").Filter("v1", "/onlyoffice/"+strconv.FormatInt(w.Id, 10)).All(&users)
		// if err != nil {
		// 	beego.Error(err)
		// }
		users := e.GetFilteredPolicy(1, "/onlyoffice/"+strconv.FormatInt(w.Id, 10))//这一行代替了上面

拿过来试了一下,先记录如下:

1、我的权限设计思路类似hauth是:a)用户;b)角色;c)权限;d)资源放在树状目录下,数据库记录的是目录的id,而非具体的路径。向用户分配角色,再将权限分配给角色。

2、casbin中下载beego-orm-adapter,并修改一点代码:

3、beego项目中conf目录下拷入rbac_model.conf;建立一个rolecontrollers.go,其中代码来自beego-orm-adapter中的readme.md,如下图:

4、bee run就会新建一个casbin_rule的数据库,填入策略数据如下图:

5、可以建个路由访问test()测试一下了:

问题:用户访问的资源比如是/v1/v2/v3/data.jpg,而数据库中所保存的资源data.jpg的路径不是明确的,只是保存了它所属的目录v3的id——目录v3的数据库也只保存了它父级v2的id……(也就是说/v1/v2/v3/data.jpg中的v1随时可能改名成v4,然后整个资源路径就变成/v4/v2/v3/data.jpg )所以策略要用保存id来实现。

先到这了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年11月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档