美文网首页
Laravel-ACL 路由保护

Laravel-ACL 路由保护

作者: 伍源辉 | 来源:发表于2017-01-19 17:07 被阅读90次

使用中间件保护路由

ACL 确定控制器是否有资源方法 (index, create, store, 等) ,或者是 RESTful。
如果方法名不是资源(即非 index, create, store),则会检查 RESTful (HTTP 方法 GET, POST, PUT, DELETE)。

如果你的项目中这些都不可用,则必须定义包含方法的数组类型的 protect_methods 参数,这些方法是需要在 crud 中被保护的。

例如,用户查看内容时是一个 GET 请求,所以 ACL 会检查它是否是资源方法,如果不是则检查 restful 并得知它是 GET 方法,则 view 被保护,因此用户必须要有 view.user 权限。

如果你传入 protect_methods,可以通过定义你自己的方法名来保护资源。

 [
   'create' => ['store'],    // protects store() method on create.user (create.alias)
   'view'   => ['index', 'create', 'show', 'edit'],     // protects index(), create(), show(), edit() methods on view.user permission.
   'update' => ['update'],
   'delete' => ['destroy']
]

参数定义

  • 验证用户是否拥有角色, ['is' => 'administrator']
  • 验证用户是否拥有权限, ['can' => 'view.admin, update.user']
  • 保护控制器方法, ['protect_alias' => 'user'],会使用权限的别名 user 并基于这个别名的权限保护 crud 方法。

举个栗子,如果用户有查看的权限但没有更新的权限,则允许 HTTP GET 方法但不允许 PUT。
如果你需要保护自己的控制器方法,你可以将它们定义为一个数组。

['protect_alias'  => 'user', 
 'protect_methods' => [
          'create' => ['someMethod', 'anotherMethod'],
          'read'   => ['readMethod', 'showMethod'],
          'view'   => ['readMethod', 'showMethod'], // its same as read.
          'update' => ['editMethod'],
          'delete' => ['destroyMethod']
]];

保护路由组/资源

要保护路由很容易。下面的例子检查用户是否有 administrator 角色。

Route::group(['prefix' => 'user', 
              'middleware' => ['auth', 'acl'],
              'is' => 'administrator'], 
function () {
    Route::resource('user', 'UsersController');
});

或者检查用户是否有 administrator 角色并有 create.user, delete.user 的权限。

Route::group(['prefix' => 'user', 
              'middleware' => ['auth', 'acl'],
              'is' => 'administrator',
              'can' => 'create.user, delete.user'], 
function () {
    Route::resource('user', 'UsersController');
});

或者通过 user 权限别名保护 crud 方法。

Route::group(['prefix' => 'user', 
              'middleware' => ['auth', 'acl'],
              'is' => 'administrator',
              'can' => 'do.something',
              'protect_alias' => 'user'], 
function () {
    Route::resource('user', 'UsersController');
});

保护路由

保护一个单独的路由和保护路由组的设置一样简单。只需要使用相同的权限参数。

Route::get('/dashboard', [
    'uses'        => 'DashboardController@index',
    'middleware'   => ['auth', 'acl'],
    'is'           => 'administrator',
    'can'          => 'view.dashboard']);

或者通过 dashboard 权限别名保护 crud 方法。

Route::get('/dashboard', [
    'uses'          => 'DashboardController@index',
    'middleware'    => ['auth', 'acl'],
    'is'            => 'administrator',
    'protect_alias' => 'dashboard']);

相关文章

  • Laravel-ACL 路由保护

    使用中间件保护路由 ACL 确定控制器是否有资源方法 (index, create, store, 等) ,或者是...

  • Angular学习笔记(四)Angular Router 导航

    学习路由基本知识学习子路由、保护路由、辅助路由等 一、创建路由项目 使用 ng new xxx --routing...

  • React 保护式路由

    大多数情况中,我们必须先验证登录状态才能进入到主页,所以需要保护式路由。这里,需要保护的路由是Admin,如果登录...

  • 每日安全资讯(2019.12.17)

    TP-Link Archer系列路由器漏洞可使Admin账户密码保护失效Internet路由器是连接我们工作,服务...

  • [CCNA图文笔记]-28-思科路由安全浅析

    0×1.思科路由密码安全浅析对路由器最直接有效的攻击手段就是获取管理密码(vty密码和特权密码等),保护路由器密码...

  • vue 登录模块开发总结

    登录模块 需要做路由的守卫,有些模块是需要被保护的,必须登录才能访问。 常见手法是给路由添加meta:{ auth...

  • Laravel-ACL [译]

    Laravel ACL 是一个基于角色的权限管理包,可用于构建 Laravel 5 的身份认证系统。 要求 支持 ...

  • angular的路由守卫

    what? 路由守卫是保护一个路由对象中的组件,是否被访问如何实现 : 1.创建一个服务 2.配置 service...

  • vue-router的认识

    vue-router中保护路由安全通常使用导航守卫来做,通过设置路由导航钩子函数的方式添加守卫.在里面判断用户状态...

  • 第七节 熔断路由和监控

    熔断路由 解释通过生活常识我们知道电路中的电路由的作用是为了保护电路,阻止电流继续工作的一种自动装置。 这里的熔断...

网友评论

      本文标题:Laravel-ACL 路由保护

      本文链接:https://www.haomeiwen.com/subject/wmrzvttx.html