Laravel5.1权限管理,比sentry/sentinel/entry更简单更快,核心代码不超过10行,请大神们发表点意见
最近研究Laravel的用户登录和权限,把结果和大家分享一下:
Laravel登陆和权限管理主要有用内置的+自己写,还有用包。
至于用包的好处是:功能强大、稍复杂、占用资源多,对包的依赖性强(比如sentry/sentinel/entry官方今天都还没有支持Laravel5.1)。
本来我是比较倾向于Laravel5.1+sentinel,因为sentinel除了权限管理,还能防暴力破解(连续多次登录失败后将不允许登录),但是要比如登陆、注册、找回密码等操作都要自己写控制器和视图,而且最讨厌的是我一直没有搞成功,可能是官方不支持5.1的原因,最后不得不放弃。
登陆、注册、找回密码,Laravel5.0的Auth自带了控制器和视图, Laravel5.1自带了控制器,视图可以直接复制5.0的,真的是非常方便,比包方便多了。
最后我用的方法是:用5.1自带的Auth,加个验证码(mews/captcha),权限管理自己写,具体思路为:
config/app.php 增加下2个:
写一个函数:
核心工作就完成了,如果要控制权限,在控制器加一句话即可,例如:
完成,此方法不用很多数据库,只要用户表有个permission字段(smallint)即可,而且代码少。
不知道这个方法有没有改进的空间,请大神们指点一下。
Laravel登陆和权限管理主要有用内置的+自己写,还有用包。
至于用包的好处是:功能强大、稍复杂、占用资源多,对包的依赖性强(比如sentry/sentinel/entry官方今天都还没有支持Laravel5.1)。
本来我是比较倾向于Laravel5.1+sentinel,因为sentinel除了权限管理,还能防暴力破解(连续多次登录失败后将不允许登录),但是要比如登陆、注册、找回密码等操作都要自己写控制器和视图,而且最讨厌的是我一直没有搞成功,可能是官方不支持5.1的原因,最后不得不放弃。
登陆、注册、找回密码,Laravel5.0的Auth自带了控制器和视图, Laravel5.1自带了控制器,视图可以直接复制5.0的,真的是非常方便,比包方便多了。
最后我用的方法是:用5.1自带的Auth,加个验证码(mews/captcha),权限管理自己写,具体思路为:
config/app.php 增加下2个:
'qx_name' => [1=>'可登陆',2=>'可进后台',4=>'新闻编辑',8=>'增加新闻',16=>'删除新闻',32=>'系统设置',64=>'用户管理'],//权限名称
'qx' => [1=>['超级管理员',127],2=>['管理员',31],4=>['用户',1]],//所有用户组,可增加、修改、删除,如果可以让用户可以修改的话也很容易,不要放到app.php换个地方就可以了
写一个函数:
function lq_qx ($qx, $user_qx_group) {//验证$user_qx是否具有$qx的权限。$user_qx_group 用户表中的数字, $qx 具体某一个权限}
$qx_me = false;
foreach (config('app.qx') as $k1=>$v1){//从config/app.php取得值
if( ($user_qx_group & $k1) == $k1 ){
if( (config('app.qx.'.$k1.'.1') & $qx) == $qx ){
$qx_me = true;
}
}
}
return $qx_me;
核心工作就完成了,如果要控制权限,在控制器加一句话即可,例如:
public function conf()
{
if( ! lq_qx (2, Auth::user()->permission)) return back()->with('message', '无权限!');
……
}
完成,此方法不用很多数据库,只要用户表有个permission字段(smallint)即可,而且代码少。
不知道这个方法有没有改进的空间,请大神们指点一下。
10 个评论
配置文件就两个数组,其中qx_name是固定不变的,网站的使用者不用改这个。
网站使用者只要修改qx这个数组来达到新增、编辑、删除用户组的目的。
请看我的部分代码:
用户编辑的部分视图:
<label><input type="checkbox" name="permission[]" value="1">超级管理员</label>
<label><input type="checkbox" name="permission[]" value="2">管理员</label>
<label><input type="checkbox" name="permission[]" value="4">用户</label>
用户组编辑的部分视图
<label><input type="checkbox" name="group_qx[]" value="1">可登陆</label>
<label><input type="checkbox" name="group_qx[]" value="2">可进后台</label>
<label><input type="checkbox" name="group_qx[]" value="4">新闻编辑</label>
<label><input type="checkbox" name="group_qx[]" value="8">增加新闻</label>
<label><input type="checkbox" name="group_qx[]" value="16">删除新闻</label>
利用PHP生成 'qx' => [1=>['超级管理员',127],2=>['管理员',31],4=>['用户',1]] 你肯定会的吧?
这个数组不一定放在config/app.php,你可以生成数组后放到 config/XXX.php
网站使用者只要修改qx这个数组来达到新增、编辑、删除用户组的目的。
请看我的部分代码:
用户编辑的部分视图:
<label><input type="checkbox" name="permission[]" value="1">超级管理员</label>
<label><input type="checkbox" name="permission[]" value="2">管理员</label>
<label><input type="checkbox" name="permission[]" value="4">用户</label>
用户组编辑的部分视图
<label><input type="checkbox" name="group_qx[]" value="1">可登陆</label>
<label><input type="checkbox" name="group_qx[]" value="2">可进后台</label>
<label><input type="checkbox" name="group_qx[]" value="4">新闻编辑</label>
<label><input type="checkbox" name="group_qx[]" value="8">增加新闻</label>
<label><input type="checkbox" name="group_qx[]" value="16">删除新闻</label>
利用PHP生成 'qx' => [1=>['超级管理员',127],2=>['管理员',31],4=>['用户',1]] 你肯定会的吧?
这个数组不一定放在config/app.php,你可以生成数组后放到 config/XXX.php