Laravel 編碼技巧 授權

2023-02-16 17:10 更新

一次檢查多個權限

除了 @can Blade 指令外,你知道可以用 @canany 指令一次檢查多個權限嗎?

@canany(['update', 'view', 'delete'], $post)
    // 當前用戶可以修改,查看,或者刪除帖子
@elsecanany(['create'], \App\Post::class)
    // 當前用戶可以創(chuàng)建帖子
@endcanany

更多關于用戶注冊的事件

希望在新用戶注冊后執(zhí)行一些操作? 轉(zhuǎn)到 app/Providers/EventServiceProvider.php 和 添加更多的監(jiān)聽類,然后在 $event->user 對象中實現(xiàn) handle() 方法。

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,

            // 您可以在這里添加任何Listener類
            // 在該類中使用handle()方法
        ],
    ];

你知道 Auth::once ()?

你可以用用戶登錄一個請求,使用方法 Auth::once()。

不會使用任何會話或 cookie,這意味著該方法在構建無狀態(tài) API 時可能很有幫助。

if (Auth::once($credentials)) {
    //
}

更改用戶密碼更新的 API 令牌

當用戶的密碼更改時,可以方便地更改用戶的 API 令牌。

模型:

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = $value;
    $this->attributes['api_token'] = Str::random(100);
}

覆蓋超級管理員的權限

如果你已經(jīng)定義了網(wǎng)關(Gates)但是又想要覆蓋超級管理員的所有權限。 給超級管理員所有權限,你可以在 AuthServiceProvider.php 文件中用 Gate::before() 語句攔截網(wǎng)關(Gates)。

// 攔截任何一個網(wǎng)關,檢查它是否是超級管理員
Gate::before(function($user, $ability) {
    if ($user->is_super_admin == 1) {
        return true;
    }
});

// 或者你使用一些權限包
Gate::before(function($user, $ability) {
    if ($user->hasPermission('root')) {
        return true;
    }
});


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號