Laravel 5.1 ACL权限控制 一
请自行添加命名空间,代码下载地址 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权限控制 一的更多相关文章
- Laravel 5.1 ACL权限控制 二 之策略类
随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...
- Laravel 5.1 ACL权限控制 三 之权限准备及实现权限管理
请自动参照到上上篇文章 1.创建控制器 php artisan make:model Permission php artisan make:model Role 2.创建表 php artisan ...
- Laravel 5.1 ACL权限控制 四 之middleware
1.创建Middleware php artisan make:middleware MustBeAnAdmin 2.实现 MustBeAnAdmin.php中的handle方法,判断登录的用户是否为 ...
- zookeeper的ACL权限控制
ACL:Access Control List 访问控制列表 1. 简介 0.概述 ACL 权限控制,使用:scheme:id:perm 来标识,主要涵盖 3 个方面: 权限模式(Scheme): ...
- Linux系统——ACL权限控制及特殊权限
ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...
- phalcon: 目录分组后的acl权限控制
phalcon: 目录分组后的acl权限控制 楼主在做acl权限的时候,发现官方的acl只能针对未分组的目录,如下: app/ ___|./controller ___|./logic ___|./p ...
- Laravel 使用中间件进行权限控制
Laravel 使用中间件进行权限控制 飞凡的陀螺 关注 2018.01.24 17:45 字数 264 阅读 1138评论 0喜欢 1 先看 文档Laravel 中间件提供了一种方便的机制来过滤进入 ...
- 1.ZooKeeper ACL权限控制
参考:https://blog.csdn.net/liuxiao723846/article/details/79391650 ZK 类似文件系统,Client 可以在上面创建节点.更新节点.删除节点 ...
- ZooKeeper学习之路(五)—— ACL权限控制
一.前言 为了避免存储在Zookeeper上的数据被其他程序或者人为误修改,Zookeeper提供了ACL(Access Control Lists)进行权限控制.只有拥有对应权限的用户才可以对节点进 ...
随机推荐
- css 自适应布局阮一峰
转载一篇文章: 自适应网页设计(Responsive Web Design) 作者: 阮一峰 移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小 ...
- Noip2013调试技巧
关于调试技巧,个人觉得还是很重要的,于是把自己之前写过的总结拿出来,修修补补再复习一下. F7 单步跟踪法 这是大家都最常用的调试方法,可以一步一步去跟踪程序的运行方向,以及各种变量的变化情况,当发现 ...
- 国产编程语言R++ V1.5发布
R++ v1.5内核改动较大,下面是一些主要变化: 1.使用PJIT(Pseudocode Just-In-Time),编译速度大幅提高,但运行效率远远不如C++,不过R++将在下一版本支持RJIT( ...
- HUD 4473 Exam
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4473 题目意思 定义f(x) = 满足(a * b)|x的有序对(a,b)的个数. 然后输入一个n, ...
- Google Maps 学习笔记(三)
1.GPolyline折线对象和GPolygon多边形对象 html标签中必须包含v="urn:schemas-microsoft--com:vml"的命名空间 <html ...
- 新浪微博 2.4sdk 一闪而过
解决方法,保持 ios应用中的 build id和 开放平台中填写的一致
- 全国三级城市联动 js版
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ADO.NET详解----核心对象的使用
一.Connection对象 指定某个具体数据源以及提供登陆方式及用户名与密码. Connection对象的主要成员: 1.ConnectionString属性:连接字符串,指定要操作的数据库以及登录 ...
- FOREIGN KEY相关
在添加外键的时候可以在最后通过ON指定行为和三个参数,来表示操作主表数据之后外表的变化 比如若是删除主表之后的变化,就可以 ON DELETE + 三个参数 --删除department表中相关数据行 ...
- Inlay技术要求
物理特性: 项目 要求内容 备考 基准值 公差 INLAY尺寸 A(长) 480mm ±0.5mm B(宽) 380mm ±0.5mm 线圈位置 C(天地位置) 16.05mm ±0.2mm D(左右 ...