| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- namespace App\Module\OAuth\AdminControllers;
- use App\Module\OAuth\Models\OAuthClient;
- use App\Module\OAuth\Repositories\OAuthRepository;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use Dcat\Admin\Http\Controllers\AdminController;
- use Dcat\Admin\Layout\Content;
- use Spatie\RouteAttributes\Attributes\Get;
- use Spatie\RouteAttributes\Attributes\Resource;
- #[Resource('oauth/clients', except: ['destroy'])]
- class OAuthClientController extends AdminController
- {
- protected $repository;
- public function __construct(OAuthRepository $repository)
- {
- $this->repository = $repository;
- }
- /**
- * 列表页面
- *
- * @return Grid
- */
- protected function grid()
- {
- return Grid::make($this->repository, function (Grid $grid) {
- $grid->column('id', 'ID')->sortable();
- $grid->column('name', '名称');
- $grid->column('client_id', '客户端ID')->copyable();
- $grid->column('client_secret', '客户端密钥')->copyable();
- $grid->column('redirect_uri', '回调地址');
- $grid->column('grant_types', '授权类型')->display(function ($grantTypes) {
- return implode(', ', $grantTypes ?? []);
- });
- $grid->column('scope', '权限范围')->display(function ($scopes) {
- return implode(', ', $scopes ?? []);
- });
- $grid->column('created_at', '创建时间');
- $grid->column('updated_at', '更新时间');
- // 过滤器
- $grid->filter(function (Grid\Filter $filter) {
- $filter->equal('id');
- $filter->like('name', '名称');
- $filter->equal('client_id', '客户端ID');
- });
- // 工具栏
- $grid->tools(function (Grid\Tools $tools) {
- $tools->append(new \App\Module\OAuth\Admin\Tools\TokenStats());
- });
- });
- }
- /**
- * 详情页面
- *
- * @param int $id
- * @return Show
- */
- protected function detail($id)
- {
- return Show::make($id, $this->repository, function (Show $show) {
- $show->field('id');
- $show->field('name', '名称');
- $show->field('client_id', '客户端ID');
- $show->field('client_secret', '客户端密钥');
- $show->field('redirect_uri', '回调地址');
- $show->field('grant_types', '授权类型')->as(function ($grantTypes) {
- return implode(', ', $grantTypes ?? []);
- });
- $show->field('scope', '权限范围')->as(function ($scopes) {
- return implode(', ', $scopes ?? []);
- });
- $show->field('created_at');
- $show->field('updated_at');
- // 显示关联的令牌
- $show->relation('tokens', '访问令牌', function ($grid) {
- $grid->model()->orderBy('created_at', 'desc');
- $grid->column('access_token', '访问令牌')->limit(20);
- $grid->column('user_id', '用户ID');
- $grid->column('expires_at', '过期时间');
- $grid->column('created_at', '创建时间');
- });
- });
- }
- /**
- * 表单页面
- *
- * @return Form
- */
- protected function form()
- {
- return Form::make($this->repository, function (Form $form) {
- $form->display('id');
- $form->text('name', '名称')->required();
- if ($form->isCreating()) {
- $form->hidden('client_id');
- $form->hidden('client_secret');
- $form->submitted(function (Form $form) {
- $form->client_id = bin2hex(random_bytes(20));
- $form->client_secret = bin2hex(random_bytes(20));
- });
- } else {
- $form->display('client_id', '客户端ID');
- $form->display('client_secret', '客户端密钥');
- }
- $form->url('redirect_uri', '回调地址')->required();
- $form->multipleSelect('grant_types', '授权类型')
- ->options([
- 'authorization_code' => '授权码模式',
- 'implicit' => '简化模式',
- 'password' => '密码模式',
- 'client_credentials' => '客户端模式',
- 'refresh_token' => '刷新令牌',
- ])
- ->required();
- $form->tags('scope', '权限范围')
- ->help('输入权限名称后按回车添加');
- $form->display('created_at');
- $form->display('updated_at');
- });
- }
- /**
- * 令牌管理页面
- *
- * @param Content $content
- * @param string $clientId
- * @return Content
- */
- #[Get('clients/{client}/tokens', name: 'oauth.clients.tokens')]
- public function tokens(Content $content, $clientId)
- {
- return $content->title('令牌管理')
- ->description('查看和管理访问令牌')
- ->body(function ($body) use ($clientId) {
- $grid = new Grid(new OAuthRepository);
- $grid->model()
- ->whereHas('tokens', function ($query) use ($clientId) {
- $query->where('client_id', $clientId);
- });
- $grid->column('access_token', '访问令牌');
- $grid->column('user_id', '用户ID');
- $grid->column('expires_at', '过期时间');
- $grid->column('created_at', '创建时间');
- $grid->actions(function (Grid\Displayers\Actions $actions) {
- $actions->disableEdit();
- $actions->disableView();
- });
- $body->append($grid);
- });
- }
- }
|