laravel实现简单用户权限的示例代码

作者:薛俊皓 时间:2023-11-14 11:58:29 

关于权限管理的思考

最近用laravel设计后台,后台需要有个权限管理。权限管理实质上分为两个部分,首先是认证,然后是权限。认证部分非常好做,就是管理员登录,记录session。这个laravel中也有自带Auth来实现这个。最麻烦就是权限认证。

权限认证本质上就是谁有权限管理什么东西。这里有两个方面的维度,谁,就是用户维度,在用户维度,权限管理的粒度可以是用户一个人,也可以是将用户分组,如果将用户分组,则涉及到的逻辑是一个用户可以在多个组里面吗?在另外一方面,管理什么东西,这个东西是物的维度,一个页面是一个东西,一个页面上的一个元素也是一个东西,或者往大了说,一个功能是一个东西。所以做权限管理最重要的是确认这两个维度的粒度。这个已经不是技术的事情了,这个是需要需求讨论的了。

基于上面的思考,我这次想做的权限管理,在用户维度,是基于个人的。就是每个人的权限不一样。在东西的维度,我设置路由为最小的单位,即可以为单个路由设置权限管理。

下面的思考就是使用什么来标记权限,可以使用位,也可以使用字符,也可以使用整型。后来我选择了字符,基于两点考虑:1 字符浅显易懂,在数据库中查找也比较方便 2 我没有按照某个权限查找有这个权限的人的需求,即没有反查需求,使用位,整型等都意义不大。

接下来考虑如何和laravel结合,既然要为每个路由设置访问权限,那么我当然希望能在laravel的route.php路由管理中配置。最好就是在Route::get的时候有个参数能设置permission。这样做的好处是权限设置简易了。在决定路由的时候,就顺手写了权限控制。坏处呢,也很明显,laravel路由的三种方式只能写一种了。就是Route::(method)这样的方式了。

基本决定好了就开干。

路由设计

基本的路由是这样的


Route::post('/admin/validate', ['uses' => 'AdminController@postValidate', 'permissions'=>['admin.validate', 'admin.index']]);

这里在基本的制定路由action之后设置了一个permissions的属性,这个属性设计成数组,因为比如一个post请求,它可能在某个页面会触发,也可能在另外一个页面触发,那么这个post请求就需要同时拥有两个页面路由的权限。

这里使用admin.validate的权限控制,这样,可以将权限分组,admin都是关于admin相关的分组,在数据库中,我就会存储一个二维数组,[admin] => ['validate', 'index']; 存储成二维数组而不是一维的好处呢,一般后台展示是有两个维度的,一个是头部的tab栏,一个是左边的nav栏,就是说这个二维的数组和后台的tab,nav栏是一一对应的。

中间件设计

来源:https://segmentfault.com/a/1190000019310029

标签:laravel,用户权限
0
投稿

猜你喜欢

  • Python实现Const详解

    2021-06-24 16:18:40
  • python模块导入的细节详解

    2021-01-09 19:18:08
  • python 发送和接收ActiveMQ消息的实例

    2022-08-23 18:45:20
  • 如何将数据访问页绑定到断开连接的 ADO 记录集上?

    2009-12-03 20:07:00
  • python实现网页录音效果

    2022-03-19 08:07:15
  • python 类相关概念理解

    2023-02-17 21:16:47
  • matplotlib subplot绘制多个子图的方法示例

    2021-12-18 14:49:50
  • asp将table生成excel文件(xls)

    2011-03-07 11:17:00
  • Go gRPC服务客户端流式RPC教程

    2023-07-16 06:08:55
  • python实现两个经纬度点之间的距离和方位角的方法

    2022-03-15 02:41:27
  • python的debug实用工具 pdb详解

    2021-04-16 10:31:17
  • Python实现简单2048小游戏

    2023-08-13 00:19:18
  • Python编程实现tail-n查看日志文件的方法

    2023-07-26 01:17:42
  • python Django框架快速入门教程(后台管理)

    2022-04-17 11:43:12
  • Python爬虫爬取百度搜索内容代码实例

    2022-06-23 02:21:11
  • 浅谈Python数学建模之整数规划

    2021-12-01 18:26:07
  • python for循环赋值问题

    2023-01-26 05:56:32
  • 详细讲解SQL Server数据库的文件恢复技术

    2009-01-15 12:54:00
  • 关于淘宝商城新版的一点看法

    2009-06-28 16:00:00
  • Python Log文件大小设置及备份的方法

    2022-08-02 13:46:14
  • asp之家 网络编程 m.aspxhome.com