Авторизация

# Основы

Админ-панель MoonShine не отходит от концепций Laravel и также с помощью Laravel policy может работать с правами доступа.

В ресурс-контроллерах MoonShine каждый метод будет проверяться на наличие прав. Если возникают трудности, то ознакомьтесь с официальной документацией Laravel .

По умолчанию для ресурсов проверка прав отключена. Чтобы включить, необходимо добавить свойство withPolicy.

namespace App\MoonShine\Resources;
 
use App\Models\Post;
use MoonShine\Resources\ModelResource;
 
class PostResource extends ModelResource
{
protected string $model = Post::class;
 
protected bool $withPolicy = true;
 
//...
}

Для создания Policy с привязкой пользователя админ-панели можно воспользоваться консольной командой:

php artisan moonshine:policy

Доступные методы Policy:

  • viewAny - индексная страница;
  • view - детальная страница;
  • create - создание записи;
  • update - редактирование записи;
  • delete - удаление записи;
  • massDelete - массовое удаление записей;
  • restore - восстановление записи после soft удаления;
  • forceDelete - безвозвратное удаление записи из базы данных.
namespace App\Policies;
 
use Illuminate\Auth\Access\HandlesAuthorization;
use App\Models\Post;
use MoonShine\Models\MoonshineUser;
 
class PostPolicy
{
use HandlesAuthorization;
 
public function viewAny(MoonshineUser $user)
{
return true;
}
 
public function view(MoonshineUser $user, Post $item)
{
return true;
}
 
public function create(MoonshineUser $user)
{
return true;
}
 
public function update(MoonshineUser $user, Post $item)
{
return true;
}
 
public function delete(MoonshineUser $user, Post $item)
{
return true;
}
 
public function restore(MoonshineUser $user, Post $item)
{
return true;
}
 
public function forceDelete(MoonshineUser $user, Post $item)
{
return true;
}
 
public function massDelete(MoonshineUser $user)
{
return true;
}
}

# Дополнительная логика

Если необходимо добавить дополнительную логику авторизации в приложении или во внешнем пакете, то воспользуйтесь методом defineAuthorization в AuthServiceProvider.

use Illuminate\Database\Eloquent\Model;
use MoonShine\Contracts\Resources\ResourceContract;
use MoonShine\MoonShine;
 
public function boot(): void
{
moonshine()->defineAuthorization(
static function (ResourceContract $resource, Model $user, string $ability): bool {
return true;
}
);
}