我对 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权限管理之旅

我从网上看了你们好多的帖子那么多人都是用的EntrustSentry等等,我就想要一个简简单单的权限管理就行了,它们怎么就这么复杂,为啥权限判断都是写死的,或在路由定义中啥的(我也没细研究就看了一下例子),为啥不是url判断一下就行了,好像不太适合我,再找找吧。后来我找到一个还行aliukevicius/laravel-rbac还可以根据路由授权的,但是判断权限也是不够完美,算了我开始自己写了

我看了Laravel自带的授权很不错,但是它适合做细粒的权限分配,用policy去做资源的权限管理,我也很喜欢。

所以我想做的就是一个根据路由或者就是url的RBAC,做粗粒的权限管理,而且可以动态的改权限,然后用Laravel的Gate去做细粒化的权限管理,这样就完美了

根据路由信息判断权限

这些表啥肯定其他的rbac基本一样,但它的权限我是用路由的一些信息hash值作为权限的分配,check权限的时候直接放到默认的auth中间件中ok了

file

完美.... 这样我的RBAC就搞定了

file

页面上为角色勾选一些路由就搞定授权了.

然后怎么结合Laravel默认的Gate做细粒化权限呢?

<只是例子>如一个用户可以修改自己的密码,但不可以更改别人的,只能编辑自己的贴子不能编辑别人等等这类权限中Laravel的Gate太合适不过了,而且可以做很复杂的判断,Gate确实不错。

开始尝试Gate

policy:

file

判断权限:

file

我去...必须指定foruser了!!!
因为我改了Guard而Gate自动使用已经注入的Guard的user()去拿,这可怎么办....

现在还不知道怎么做比较合适难道真的把AuthServiceProvider全改了,太可怕了

请教大家

大家碰到需要修改Laravel框架的地方应该怎么做,现在其实我碰到就是想把Laravel提供的认证和授权分开,我只想要授权的部分,改其实也比较好改,但是怎么改是主要的。

第一次发帖

刚接触不久有什么地方说的不对的地方也请大家指出

留下我的联系方式

QQ:251611515

希望有大神联系我

本帖已被设为精华帖!
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 18

怎么在中间件根据用户请求的URI和HTTP 方法来判断用户是否有权限访问当前资源/URI?

7年前 评论

@zjien 可以的,这些信息路由里都有,详细参考我的源码吧,我也好久没玩了

7年前 评论

@zjien
https://github.com/Vr80s/laravel-rbac

public function getRouteHashId($route){
        $uri = $route->getUri();
        $method = $this->getMethod($route);
        return md5($method.'|'.$uri);
    }
7年前 评论
never615
  1. 密码加salt是从前端就要处理的,后端拿到这个已经加密后的密码之后,还要在进行一次加密在保存到数据库.这样数据库泄露了,他们拿着这些密码也没用 .具体可以看这个

  2. 定义权限的时候用url,这个不错.因为权限校验的时候,很大一部分其实就只是根据请求处理不同的权限.我不知道你是怎么设计权限表的,我觉的权限的name还是起xxx.view xxx.update xxx.create 这种,可以在增加一个字段保存对应权限的url.
7年前 评论

@Vr80s nice,解决了,谢谢

7年前 评论

@Vr80s 你好 https://github.com/Vr80s/laravel-rbac 请问这个是插件啊 还是demo啊 我是新手 做了个博客 想加入laravel的权限管理 不知道该怎么弄了

file

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!