概述
介绍
默认情况下,所有的 App\Models\User 用户可以在本地环境中访问 Filament。但如果要在生产环境中同样允许用户访问,需要一些额外的操作来确保授权的用户才能访问面板。
授权访问面板
要让非本地环境的 App\Models\User 用户获取访问权限,你需要实现 FilamentUser 合约接口:
<?php
namespace App\Models;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements FilamentUser
{
// ...
public function canAccessPanel(Panel $panel): bool
{
return str_ends_with($this->email, '@yourdomain.com') && $this->hasVerifiedEmail();
}
}
canAccessPanel() 方法返回 true 还是 false,取决于用户是否被授权允许访问该面板 $panel。本例中会检查用户的邮箱后缀是否为 @yourdomain.com 以及用户是否验证过该邮箱。
既然你可以访问当前 $panel,你可以为不同的面板编写条件。比如,只对管理面板进行严格限权,而所有用户都可以访问其他的面板:
<?php
namespace App\Models;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements FilamentUser
{
// ...
public function canAccessPanel(Panel $panel): bool
{
if ($panel->getId() === 'admin') {
return str_ends_with($this->email, '@yourdomain.com') && $this->hasVerifiedEmail();
}
return true;
}
}
授权访问资源
请查阅资源文档的授权部分,了解如何控制资源页面以及其数据记录的的访问。
设置头像
Filament 使用可开箱即用的 ui-avatars.com 生成基于用户名的头像。不过,如果你的模型中有 avatar_url 属性,则会使用该属性。要自定义 Filament 获取用户头像 URL,你也可以实现 HasAvatar 合约接口:
<?php
namespace App\Models;
use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasAvatar;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements FilamentUser, HasAvatar
{
// ...
public function getFilamentAvatarUrl(): ?string
{
return $this->avatar_url;
}
}
getFilamentAvatarUrl() 方法用于获取当前用户的头像。如果这个方法返回 null,Filament 会转向 ui-avatars.com。