🌟

Laravel Filamentで請求システム作る No6 Policyをリファクタリング

2023/12/02に公開

前回に引き続きFilamentで請求システムを作っていきます。

Policyの最低限の動作チェックを行ったので、他のリソースもPolicyで管理します。
また、どのPlicyでもやることはほとんど同じなので、BasePolicyという親クラスを作って
共有しちゃいます。

BasePolicyを作る

コマンドはこんな感じ

./vendor/bin/sail artisan make:policy BasePolicy

上記を実行すると「app\Policies\BasePolicy.php」ができます。
中身はこんな感じにしました

app\Policies\BasePolicy.php
namespace App\Policies;
use App\Models\User;

class BasePolicy
{
    /**
     * Create a new policy instance.
     */
    public function __construct()
    {
        //
    }
    protected $modelName = '';
    public function viewAny(User $user)
    {
        return $user->hasPolicy($this->modelName, 'view_any');
    }
    public function create(User $user)
    {
        return $user->hasPolicy($this->modelName, 'create');
    }
    public function view(User $user)
    {
        return $user->hasPolicy($this->modelName, 'view');
    }
    public function update(User $user)
    {
        return $user->hasPolicy($this->modelName, 'update');
    }
    public function delete(User $user)
    {
        return $user->hasPolicy($this->modelName, 'delete');
    }
}

UserPolicyで継承する。

UserPolicyはこんな感じに変更しました。

app\Policies\UserPolicy.php
namespace App\Policies;
use App\Models\User;
class UserPolicy extends BasePolicy
{
    protected $modelName = 'user';
}

動作確認

ViewAnyをFalseに


お~!!サイドバーから「ユーザー」というボタンが消えてる!

ViewAnyをTrue。その他はFalse


OKOK!いけてるね。

自分で使うプログラムなので、テストはおおざっぱに行きますwww
お客さんのシステムならちゃんとしますよwww

顧客に対するPolicyを作る

という事で、CustomerのPolicyも作ります。

./vendor/bin/sail artisan make:policy CustomerPolicy

app\Policies\CustomerPolicy.phpができる。

中身は・・・

app\Policies\CustomerPolicy.php
namespace App\Policies;
use App\Models\User;

class CustomerPolicy extends BasePolicy
{
    protected $modelName = 'customer';
}

でOK

テストも軽くやって問題無い事を確認しました。

次回

これで、DBで権限を操作できるようになったので、
その権限を操作するための画面を作っていかないといけないですね。

次回はその辺をやります。
Laravel Filamentで請求システム作る No7 画面で権限を操作

Discussion