我对 Laravel 权限管理的纠结
背景
新人刚接触Laravel不久,开始用的版本是5.1.*
我一般学习肯定是开始现弄个登陆啥的,发现Laravel认证和授权都已经默认给做好了,然后我就想看一下他怎么做的适合不适合,我就当学习了。
一. 发现他的认证用的php的password_hash对密码加密的但我喜欢password+salt的方式,虽然password_hash已经给加盐了(我也不知道哪种好,但我想自己实现)。改也比较简单仿照Guard
的attempt在Controller判断一下就好了。
然后继续
二. 发现登陆后的session大串这都是啥好乱,然后我开始看 Guard
的源码,它为啥不是uid啥的,username我也想放进去,我又要改...
后来我干脆就把Guard
重写了,感觉爽多了
后面问题也就来了,Guard
我重写了但没有注册到IOC中,因为Laravel已经给注册好了,改动太大了,我这也不能改框架呀,算了调用的时候就不用它的接口注入了,直接用我的Guard
的类,但后面还有问题后面说吧
好吧,我就是这么纠结...
开始我的RBAC权限管理之旅
我从网上看了你们好多的帖子那么多人都是用的Entrust
和Sentry
等等,我就想要一个简简单单的权限管理就行了,它们怎么就这么复杂,为啥权限判断都是写死的,或在路由定义中啥的(我也没细研究就看了一下例子),为啥不是url判断一下就行了,好像不太适合我,再找找吧。后来我找到一个还行aliukevicius/laravel-rbac
还可以根据路由授权的,但是判断权限也是不够完美,算了我开始自己写了
我看了Laravel自带的授权很不错,但是它适合做细粒的权限分配,用policy去做资源的权限管理,我也很喜欢。
所以我想做的就是一个根据路由或者就是url的RBAC,做粗粒的权限管理,而且可以动态的改权限,然后用Laravel的Gate
去做细粒化的权限管理,这样就完美了
根据路由信息判断权限
这些表啥肯定其他的rbac基本一样,但它的权限我是用路由的一些信息hash值作为权限的分配,check权限的时候直接放到默认的auth中间件中ok了
完美.... 这样我的RBAC就搞定了
页面上为角色勾选一些路由就搞定授权了.
然后怎么结合Laravel默认的Gate
做细粒化权限呢?
<只是例子>如一个用户可以修改自己的密码,但不可以更改别人的,只能编辑自己的贴子不能编辑别人等等这类权限中Laravel的Gate
太合适不过了,而且可以做很复杂的判断,Gate
确实不错。
开始尝试Gate
policy:
判断权限:
我去...必须指定foruser了!!!
因为我改了Guard
而Gate自动使用已经注入的Guard
的user()去拿,这可怎么办....
现在还不知道怎么做比较合适难道真的把AuthServiceProvider
全改了,太可怕了
请教大家
大家碰到需要修改Laravel框架的地方应该怎么做,现在其实我碰到就是想把Laravel提供的认证和授权分开,我只想要授权的部分,改其实也比较好改,但是怎么改是主要的。
第一次发帖
刚接触不久有什么地方说的不对的地方也请大家指出
留下我的联系方式
QQ:251611515
希望有大神联系我
推荐文章: