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

1、所需要用到的数据表

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

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

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

  posts(文章表)

php artisan make:migration create_posts_table --create=posts
     public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('title');
$table->text('body');
$table->timestamps();
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
});
}
php artisan migrate

3、生成测试数据

 php artisan make:model Post

 在database/factories/ModelFactory.php在添加

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

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

  4、创建Post控制器;

php artisan make:controller PostController

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

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

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

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

  public function show($id)
{
//
$post = Post::find($id);
return view('post.show', compact('post'));
}

  7、show.blade.php

  标题:{{ $post->title }}
  <br>
  内容:{{ $post->body }}

  预览:

      

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

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

    public function boot(GateContract $gate)
{
$this->registerPolicies($gate); $gate->define('show-post', function ($user, $post) {
return $user->owns($post);
});
}

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

  在User.php文件中添加

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

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

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

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

       

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

  9、在PostController.php中修改为

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

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

  标题:{{ $post->title }}
  <br>
  内容:{{ $post->body }}
  @can('show-post', $post)
  <a href="#">编辑文章</a>
  @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. protel99与win7兼容问题的解决方案

    一些用户大概都已经把自己的 PC 从 winXP 换到了 win7,在 win7 给我们带来的视觉上的冲击和功能上的更换.也不时的带来了各方面的软件兼容问题 ,而一般上的兼容都可以在 win7 的自动 ...

  2. Struts2 一张图片引发的bug

    今天如常的打开项目开放.写了一会保存测试.在登录时出了个错误当不影响正常使用.丫的昨天还好好的.行下手上的工作 开始找bug 错误核心代码如下: 10:34:46,442  WARN OgnlValu ...

  3. [置顶] C++基础之六:运算符的重载

    网上太多有关运算符的重载了,但是写的太过的详细,不适合新手入门,特别是那什么++和--的前增量后增量重载,一元二元运算符重载,特殊运算符,下标运算符,new和delete,甚至是指针运算符的重载,吓退 ...

  4. Mybatis上路_05-使用命令行自动生成【转】

    http://my.oschina.net/vigiles/blog/125127 Mybatis上路_05-使用命令行自动生成   1人收藏此文章, 我要收藏 发表于1个月前(2013-04-24 ...

  5. pkg-config的用法

    pkg-config的用法 pkg-config pkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径.版本号等信息的程序. 譬如说我们运行以下命令:pkg-config  ...

  6. Img垂直居中

    IMG垂直居中问题 2011-02-22 10:51:00|  分类: CSS |  标签:垂直居中  div  align  img  vertical  |举报|字号 订阅    转载来自:htt ...

  7. pthread_wrap.h

    #ifndef _PTHREAD_WRAP_H#define _PTHREAD_WRAP_H#include <pthread.h> class hm_pthread_mutex{publ ...

  8. js正则语法

    整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数 ...

  9. ubuntu NFS

    NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录, 访问该目录就像访问本地目录一样! 一般而言, 使用 ...

  10. (asp.net MVC学习)System.Web.Mvc.UrlHelper的学习与使用

    上一次学习了HtmlHelper帮助类,这次我们学习一下UrlHelper帮 助类,看类名也都知道这个类是用来帮我们生成URL在ASP.NET MVC应用程序中.让我们来看看该类给我们带来了哪些方便的 ...