# 访客模式
在前面几节的中间件策略中,我们始终没有放开 `Auth/@index` 的访客访问,在未登录的情况下,直接访问将会跳转到登录页面,并且已登录用户无法浏览其他用户的页面,接下来的步骤将会解决这个问题。
## 放开权限
由于在控制器中多个方法都被中间件拦截,现在重新编辑
`application\user\controller\Auth.php`
~~~php
...
protected $middleware = [
'UserAuthorize' => [
'except' => [
'create',
'save',
'index',
'read'
]
],
...
~~~
退出登录后再次访问 http://thinkphp.test/user/auth/index ,即可看到所有用户的列表,然后我们随意点击一个用户的名字,发现页面中出现 `欢迎您` 的字样和 `编辑资料` 按钮,这是访客模式不可见的,现在我们需要一一解决。
## 判断访客
访客分为两种:
1. 未登录用户
2. 已登录用户访问其他用户页面
非常简单的,虽然拥有两种状态,但是我们只需要在控制器中传入 `Session` 即可判断。
`application\user\controller\Auth.php`
~~~php
public function read($id)
{
$user = User::find($id);
$this->assign([
'user' => $user,
'session' => Session::get('user')
]);
return $this->fetch();
}
~~~
再编辑前端页面
`resources\views\user\auth\read.blade.php`
~~~html
@extends('_layout.default')
@section('title', $user->name)
@section('content')
<div class="col-md-offset-2 col-md-8">
<div class="panel panel-default mt-5">
<div class="panel-heading mb-3">
<h4>
@if(!is_null($session) && $session->id === $user->id)
<a class="btn btn-primary" href="{{ url('user/auth/edit', ['id' => session('user.id')]) }}">
编辑资料
</a>
欢迎您
@else
您正在查看
@endif
{{ $user->name }}
</h4>
</div>
</div>
</div>
@stop
~~~
现在用不登录和登录状态随意访问其他用户的页面,可以看到以上问题均解决了。
在上一节添加删除按钮的时候,我们删除逻辑中排除了管理员自己删除自己,现在需要在前端页面中移除这个按钮。
`resources\views\user\auth\index.blade.php`
~~~html
@if ($god && !$user->god)
<form action="{{ url('user/auth/delete', ['id' => $user->id]) }}" method="post" class="float-right">
@php echo token() @endphp
<input type="hidden" name="_method" value="DELETE">
<button type="submit" class="btn btn-sm btn-danger delete-btn">删除</button>
</form>
@endif
~~~
非常简单的,只需要判断循环列表的用户 `god` 属性就行。
使用管理员登录并访问所有用户页面,可以看到所有是管理员的删除按钮全部消失了。
- 第一章. 基础信息
- 1.1 序言
- 1.2 关于作者
- 1.3 本书源码
- 1.4 反馈纠错
- 1.5 安全指南
- 1.6 捐助作者
- 第二章. 开发环境布置
- 2.1 编辑器选用
- 2.2 命令行工具
- 2.3 开发环境搭建
- 2.4 浏览器选择
- 2.5 第一个应用
- 2.6 Git 工作流
- 第三章. 构建页面
- 3.1 章节说明
- 3.2 静态页面
- 3.3 Think 命令
- 3.4 小结
- 第四章. 优化页面
- 4.1 章节说明
- 4.2 样式美化
- 4.3 局部视图
- 4.4 路由链接
- 4.5 用户注册页面
- 4.6 集中视图
- 4.7 小结
- 第五章. 用户模型
- 5.1 章节说明
- 5.2 数据库迁移
- 5.3 查看数据表
- 5.4 模型文件
- 5.5 小结
- 第六章. 用户注册
- 6.1 章节说明
- 6.2 注册表单
- 6.3 用户数据验证
- 6.4 注册失败错误信息
- 6.5 注册成功
- 6.6 小结
- 第七章. 会话管理
- 7.1 章节说明
- 7.2 会话
- 7.3 用户登录
- 7.4 退出
- 7.5 小结
- 第八章. 用户 CRUD
- 8.1 章节说明
- 8.2 重构代码
- 8.3 更新用户
- 8.4 权限系统
- 8.5 列出所有用户
- 8.6 删除用户
- 8.7 访客模式
- 8.8 优化前端
- 8.9 小结
- 第九章. 微博 CRUD
- 9.1 章节说明
- 9.2 微博模型
- 9.3 显示微博
- 9.4 发布微博
- 9.5 微博数据流
- 9.6 删除微博
- 9.7 小结