阅读时间:1 分钟
0 字
授权系统
DuxLite 基于用户模型的 permission 字段提供自动权限验证。
权限存储
用户权限存储在用户模型的 permission 字段中:
php
class User extends Model
{
protected $casts = [
'permission' => 'array' // 权限字段自动转换为数组
];
// 用户权限示例数据
// permission: ["admin.users.list", "admin.users.create", "admin.posts.edit"]
}权限配置
应用权限注册
php
// 在 App.php 中注册权限
public function register(Bootstrap $app): void
{
$permission = new Permission("管理后台");
// 用户管理权限组
$permission->group("users")
->label("用户管理")
->resources(['list', 'show', 'create', 'edit', 'delete']);
// 文章管理权限组
$permission->group("posts")
->label("文章管理")
->resources(['list', 'show', 'create', 'edit', 'delete']);
// 自定义权限
$permission->group("reports")->label("报表管理")->add("export");
// 注册到权限管理器
App::permission()->set('admin', $permission);
}权限中间件注册
php
// 权限中间件注册
$adminRoute = new Route('/admin', 'admin',
new AuthMiddleware('admin'), // 认证中间件
new PermissionMiddleware('admin', \App\Models\User::class) // 权限中间件
);控制器中的权限使用
自动权限验证
php
#[Resource(app: 'admin', route: '/admin/users', name: 'users')]
class UserController extends Resources
{
// 权限由中间件自动验证:
// admin.users.list - list()
// admin.users.show - show()
// admin.users.create - create()
// admin.users.edit - edit()
// admin.users.store - store()
// admin.users.delete - delete()
public function index(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
// 权限已由中间件自动验证,直接执行业务逻辑
$users = User::query()->paginate();
["data" => $data, "meta" => $meta] = format_data($users, function ($item) {
return $item->transform();
});
return send($response, 'ok', $data, $meta);
}
}跳过权限验证
php
#[Resource(app: 'admin', route: '/admin/users', name: 'users')]
class UserController extends Resources
{
// 跳过权限检查
#[Action(methods: 'GET', route: '/stats', name: 'stats', can: false)]
public function getStats(): ResponseInterface {}
// 跳过认证和权限
#[Action(methods: 'GET', route: '/public', name: 'public', auth: false)]
public function getPublic(): ResponseInterface {}
}权限命令
bash
# 查看所有应用的权限列表
php dux permission:list
# 查看指定应用的权限
php dux permission:list admin