授權(quán)相關(guān)邏輯,必須 使用 授權(quán)策略類 來(lái)實(shí)現(xiàn)。
所有 Policy 授權(quán)策略類 必須 繼承 app/Policies/Policy.php
基類?;愇募缦拢?br>
<?php
namespace App\Policies;
use Illuminate\Auth\Access\HandlesAuthorization;
class Policy
{
use HandlesAuthorization;
public function __construct()
{
//
}
public function before($user, $ability)
{
if ($user->isAdmin()) {
return true;
}
}
}
Policy 授權(quán)策略類 必須 遵循 資源路由 方式進(jìn)行命名,photos
對(duì)應(yīng) /app/Policies/PhotoPolicy.php
。
Policy 授權(quán)策略類文件內(nèi)容請(qǐng)參考以下:
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\Photo;
class PhotoPolicy extends Policy
{
public function update(User $user, Photo $photo)
{
return $user->isAuthorOf($photo);
}
public function destroy(User $user, Photo $photo)
{
return $user->isAuthorOf($photo);
}
}
應(yīng)該 使用 自動(dòng)發(fā)現(xiàn)授權(quán)策略方法,這樣控制器和授權(quán)類的方法名就統(tǒng)一起來(lái)了。
/**
* 更新指定的文章。
*
* @param int $id
* @return Response
*/
public function update($id)
{
$post = Post::findOrFail($id);
// 會(huì)自動(dòng)調(diào)用 `PostPolicy` 類中的 `update` 方法。
$this->authorize($post);
// 更新文章...
}
更多建議: