零、目標:
1.專案目標:
A.環境準備
B.建立 Laravel 專案 + 登入系統
C.建立資料庫(資料夾 / 檔案)
D.資料夾 CRUD
E.檔案上傳 / 下載
F.檔案列表(像 Google Drive)
G.分享連結
H.權限與安全
1.專案目標:
A.環境準備
B.建立 Laravel 專案 + 登入系統
C.建立資料庫(資料夾 / 檔案)
D.資料夾 CRUD
E.檔案上傳 / 下載
F.檔案列表(像 Google Drive)
G.分享連結
H.權限與安全
I.回收桶(Soft Delete)
2.目前目標:
H.權限與安全
a.用 Policy 做檔案與資料夾權限控管
b.防止未授權存取(猜網址就能看別人檔案)
c.Controller 符合 Laravel Best Practice
2.目前目標:
H.權限與安全
a.用 Policy 做檔案與資料夾權限控管
b.防止未授權存取(猜網址就能看別人檔案)
c.Controller 符合 Laravel Best Practice
一、建立 FolderPolicy
1.指令:php artisan make:policy FolderPolicy --model=Folder
2.編輯 app/Policies/FolderPolicy.php
public function view(User $user, Folder $folder): bool
{
return $folder->user_id === $user->id;
}
與
public function update(User $user, Folder $folder): bool
{
return $folder->user_id === $user->id;
}
與
public function delete(User $user, Folder $folder): bool
{
return $folder->user_id === $user->id;
}
如下圖
二、建立 FilePolicy
1.指令:php artisan make:policy FilePolicy --model=File
2.編輯 app/Policies/FilePolicy.php
public function view(User $user, File $file): bool
{
return $file->user_id === $user->id;
}
public function download(User $user, File $file)
{
return $file->user_id === $user->id;
}
public function share(User $user, File $file)
{
return $file->user_id === $user->id;
}
如下圖
三、Controller 改為 authorize(重點)
1.目的:Controller 變乾淨,安全集中管理
2.編輯下列檔案
a.FolderController@show
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
與
use AuthorizesRequests;
與
// 安全檢查:只能看自己的資料夾
$this->authorize('view',$folder);
如下圖
b.FileController@download
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
與
use AuthorizesRequests;
與
$this->authorize('download',$file);
如下圖
c.ShareController@create
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
與
use AuthorizesRequests;
與
$this->authorize('share',$file);
如下圖
四、Blade 層級權限
1.編輯 folders/show.blade.php
@can('share', $file)
與
@endcan
如下圖
五、測試
1.用A使用者登入
2.建立檔案
3.複製檔案下載網址
4.用B使用者登入
5.貼上網址->出現403 Forbidden







沒有留言:
張貼留言