请自行添加命名空间,代码下载地址 https://github.com/caoxt/learngit

1、所需要用到的数据表

  users(用户表)、roles(角色表)、role_user(用户角色对应表)、permissions(权限表)、permission_role(权限角色对应表)、posts(文章表)

  -----------------------以上命令也同样可以在phpmyadmin里完成------------------

2、使用migration创建以上数据表

  posts(文章表)

  1. php artisan make:migration create_posts_table --create=posts
  1. public function up()
  2. {
  3. Schema::create('posts', function (Blueprint $table) {
  4. $table->increments('id');
  5. $table->integer('user_id')->unsigned();
  6. $table->string('title');
  7. $table->text('body');
  8. $table->timestamps();
  9. $table->foreign('user_id')
  10. ->references('id')
  11. ->on('users')
  12. ->onDelete('cascade');
  13. });
  14. }
  1. php artisan migrate

3、生成测试数据

  1. php artisan make:model Post

 在database/factories/ModelFactory.php在添加

  1. $factory->define(App\Post::class, function (Faker\Generator $faker) {
  2. return [
  3. 'user_id' => factory(\App\User::class)->create()->id,
  4. 'title' => $faker->sentence,
  5. 'body' => $faker->paragraph,
  6. ];
  7. });
  1. php artisan tinker
  1. factory('App\Post')->create();
  1. factory('App\User')->create();

  此时第一条create会在post和user表格创建一条数据,第二条create只会在user表中创建一条数据

  4、创建Post控制器;

  1. php artisan make:controller PostController

  ------------------------以下为访问一条尚未添加权限的文章--------------------------

  5、在routes.php里添加一条路由

  1. Route::resource('post', 'PostController');

  6、在PostController.php中从数据库中取出一条数据并输出到视图

  1.   public function show($id)
  2. {
  3. //
  4. $post = Post::find($id);
  5. return view('post.show', compact('post'));
  6. }

  7、show.blade.php

  1.   标题:{{ $post->title }}
  2.   <br>
  3.   内容:{{ $post->body }}

  预览:

      

  -------------------------以下实现非文章作者则拒绝访问--------------------------

  8、在Http/Providers/AuthServiceProvide.php中定义权限

  1. public function boot(GateContract $gate)
  2. {
  3. $this->registerPolicies($gate);
  4.  
  5. $gate->define('show-post', function ($user, $post) {
  6. return $user->owns($post);
  7. });
  8. }

  此处$user会拿到登录user的表信息,$post会拿到所访问posts表信息

  在User.php文件中添加

  1. public function owns($post) {
  2. return $this->id == $post->user_id;
  3. }

  在PostController.php中检查是否认证用户

  1. public function show($id)
  2. {
  3. //
  4. $post = Post::findOrFail($id);
  5. \Auth::loginUsingId(1);//登录用户id
  6. if (Gate::denies('show-post', $post)) {  
  7. dd('无认证');
  8. }
  9. return view('post.show', compact('post'));
  10. }

  分别测试用户id1和id2登录时访问的页面

       

--------------------------------以下为 假如两个用户都可以访问页面,实现只有文章作者才可以有编辑权限----------------------------------------------

  9、在PostController.php中修改为

  1. public function show($id)
  2. {
  3. //
  4. $post = Post::findOrFail($id);
  5. \Auth::loginUsingId(2);//登录用户id
  6. /*
           if (Gate::denies('show-post', $post)) {
  7. dd('无认证');
  8. }*/
  9. return view('post.show', compact('post'));
  10. }

  10、在show.blade.php视图中修改为

  1.   标题:{{ $post->title }}
  2.   <br>
  3.   内容:{{ $post->body }}
  4.   @can('show-post', $post)
  5.   <a href="#">编辑文章</a>
  6.   @endcan

  分别测试用户id1和id2登录时访问的页面,区别为是否能看到"编辑文章"的链接

Laravel 5.1 ACL权限控制 一的更多相关文章

  1. Laravel 5.1 ACL权限控制 二 之策略类

    随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...

  2. Laravel 5.1 ACL权限控制 三 之权限准备及实现权限管理

    请自动参照到上上篇文章 1.创建控制器 php artisan make:model Permission php artisan make:model Role 2.创建表 php artisan ...

  3. Laravel 5.1 ACL权限控制 四 之middleware

    1.创建Middleware php artisan make:middleware MustBeAnAdmin 2.实现 MustBeAnAdmin.php中的handle方法,判断登录的用户是否为 ...

  4. zookeeper的ACL权限控制

    ACL:Access Control List  访问控制列表 1.  简介 0.概述 ACL 权限控制,使用:scheme:id:perm 来标识,主要涵盖 3 个方面: 权限模式(Scheme): ...

  5. Linux系统——ACL权限控制及特殊权限

    ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...

  6. phalcon: 目录分组后的acl权限控制

    phalcon: 目录分组后的acl权限控制 楼主在做acl权限的时候,发现官方的acl只能针对未分组的目录,如下: app/ ___|./controller ___|./logic ___|./p ...

  7. Laravel 使用中间件进行权限控制

    Laravel 使用中间件进行权限控制 飞凡的陀螺 关注 2018.01.24 17:45 字数 264 阅读 1138评论 0喜欢 1 先看 文档Laravel 中间件提供了一种方便的机制来过滤进入 ...

  8. 1.ZooKeeper ACL权限控制

    参考:https://blog.csdn.net/liuxiao723846/article/details/79391650 ZK 类似文件系统,Client 可以在上面创建节点.更新节点.删除节点 ...

  9. ZooKeeper学习之路(五)—— ACL权限控制

    一.前言 为了避免存储在Zookeeper上的数据被其他程序或者人为误修改,Zookeeper提供了ACL(Access Control Lists)进行权限控制.只有拥有对应权限的用户才可以对节点进 ...

随机推荐

  1. Android UI--ViewPager扩展Tab标签指示

    Android UI--ViewPager扩展Tab标签指示 2013年8月30日出来冒冒泡 ViewPager这个控件已经不算是陌生的了,各种玩Android的小伙伴们都有发表相应的文章来讲它.我看 ...

  2. POJ 3080 Blue Jeans(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=3080 [题目大意] 求k个串的最长公共子串,如果存在多个则输出字典序最小,如果长度小于3则判断查找失败. [题解] 将所有字符串通 ...

  3. sicily-1029 Rabbit

    一.      题意(0.04s) 每一对成熟的兔子可以生一对兔子,兔子在m个月之后成熟,假设兔子都不会死,计算d个月后一共有多少只兔子. 二.      要高精度加法(用string) 三.     ...

  4. 如何打开Nib文件

    作者:ani_di  版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di # 如何打开Nib文件 有段时间没有灌水,今天分享一个小技巧. nib文件是Cocoa Ap ...

  5. QVector 和vector的比较

    QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...

  6. POJ训练计划1459_Power Network(网络流最大流/Dinic)

    解题报告 这题建模实在是好建.,,好贱.., 给前向星给跪了,纯dinic的前向星居然TLE,sad.,,回头看看优化,.. 矩阵跑过了.2A,sad,,, /******************** ...

  7. linux之线程

    http://blog.csdn.net/lanyan822/article/details/7586845 POSIX线程数据类型: pthread_t 线程标识符: pthread_mutex_t ...

  8. Jquery的一些取值

    //获取当前节点的html代码(包括当前节点),prop用于获取与设置Html元素的原生属性 $("#tmpMsgObj").prop("outerHTML") ...

  9. Java中布尔类型操作符&=,|=与^=的使用

    今天在对同事的代码进行code review的时候,见到一个比较好玩的写法.“flag &= false:”,乍一看,还感觉他写错了,但是程序可以正常运行,赶紧去百度,看一下这个写法到底是怎么 ...

  10. 使用Xib添加自定义View

    1.新建Cocoa Touch Class以及UI View,2者同名 2.设置UI View的File's Owner——Custom Class为之前新建类 3.设置Xib中View与类关联 4. ...