Restful API 如何做权限控制

2017-04-06 16:55:23 +08:00
 jimzhong

最近用 lumen 做一个留学机构的网站后端。打算用基于权限的访问控制,请问有没有比较好的解决方案。

6292 次点击
所在节点    PHP
7 条回复
colatin
2017-04-06 16:59:42 +08:00
jwt
sirgod
2017-04-06 17:00:53 +08:00
如果是给人用的页面就 cookie ,如果是供服务器调用的接口就 api key + secret key
rokeyzki
2017-04-06 17:16:16 +08:00
一句话: Authentication + Authorization

首先是身份认证,使用 JWT 规范生成的 token ,搭配中间层做请求( api key + secret key ),不过要注意,尽可能不要使用 cookie 存储 token ,注意防范 CSRF 攻击。

然后就是访问授权,通过访问控制列表,将 User 分类到不同的 Role 来管理,有对应权限的 Role 才可以执行对应的操作。
peablog
2017-04-06 21:21:36 +08:00
也可以考虑在网关鉴权,比如 getkong.org
jimzhong
2017-04-07 09:47:28 +08:00
@rokeyzki 感谢指点。 Authentication 已经搞定了。对 Authorization 有一些疑问。

我想按照 RBAC 方式,一个用户有多个 role ,每个 role 有多个权限。那么这样以来用户,角色,权限各需要一张表,连接用户和角色,角色和权限各需要一张表,一共需要 5 张表,感觉有些麻烦。

对于权限比较少的请情况,我能否把不同操作的权限 hardcode 在代码中呢?
rokeyzki
2017-04-07 10:42:23 +08:00
@jimzhong 如果权限确实比较少,可以考虑用 ACL 机制,不用 RBAC 机制,去掉角色,也减少了表的数量。

两种机制都有利弊,需要自己根据实际业务场景去权衡,但是有一点可以确定,团队开发中,一定要尽可能避免 hardcode
techone
2019-09-09 14:32:18 +08:00
推荐个扩展,基于 Casbin 的 Laravel 权限控制: https://github.com/php-casbin/laravel-authz
支持中间件、RESTful 权限控制、缓存等。

[Casbin]( https://github.com/php-casbin/php-casbin) 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型( RBAC ABAC ACL )的权限管理,并且跨语言支持 Golang, Java, Node.js, PHP, Python, .NET (C#), Delphi and Rust 等。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352979

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX