# 訪客模式
在前面幾節的中間件策略中,我們始終沒有放開 `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 小結