sgcomptech/filament-ticketing

Laravel Filament 插件,支持问题跟踪和工单系统。

1.3.0 2023-02-26 14:24 UTC

This package is auto-updated.

Last update: 2024-09-26 18:02:04 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads CodeFactor

这是一个 Laravel Filament 管理面板插件包,用于将问题跟踪和工单系统支持添加到您的 Filament 项目中。

Create Ticket

List Ticket

Comments

要求

安装

您可以通过 composer 安装此包

composer require sgcomptech/filament-ticketing

使用以下命令运行迁移

php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="filament-ticketing-config"

这是发布配置文件的内容

return [
  // Defines your user model. At the moment, requires 'name' and 'email' attributes.
  'user-model' => \App\Models\User::class,

  // You can extend the package's TicketResource to customize to your needs.
  'ticket-resource' => Sgcomptech\FilamentTicketing\Filament\Resources\TicketResource::class,

  // whether a ticket must be strictly interacted with another model
  'is_strictly_interacted' => false,

  // filament navigation
  'navigation' => [
	  'group' => 'Tickets',
	  'sort' => 1,
  ],

  // ticket statuses
  'statuses' => [
	  1 => 'Open',
	  2 => 'Pending',
	  3 => 'Resolved',
	  4 => 'Closed',
  ],

  // ticket priorities
  'priorities' => [
	  1 => 'Low',
	  2 => 'Normal',
	  3 => 'High',
	  4 => 'Critical',
  ],

  // use authorization
  'use_authorization' => false,

  // event broadcast channel
  'event_broadcast_channel' => 'ticket-channel',
];

您可以使用以下命令发布翻译文件

php artisan vendor:publish --tag="filament-ticketing-translations"

用法

与工单交互您的模型

工单可以是关于一般事项,也可以与您项目中的某些实例相关。例如,您的用户可能会提出一个与他们的过去订单相关的工单。在这种情况下,您可能希望将与工单提出的订单交互。您可以通过在 Eloquent 模型类中实现 HasTickets 并使用 InteractsWithTickets 特性来实现这一点。默认情况下,此包使用模型属性 name 用于显示。您可以通过实现 public function model_name(): string 返回所需的显示属性来更改此设置。

use Illuminate\Database\Eloquent\Model;
use Sgcomptech\FilamentTicketing\Interfaces\HasTickets;
use Sgcomptech\FilamentTicketing\Traits\InteractsWithTickets;

class Item extends Model implements HasTickets
{
  use InteractsWithTickets;
}

一旦您的模型准备就绪,您可以在模型资源中添加一个表操作按钮,以便导航到链接的工单列表页面。在此列表页面上,将显示该模型实例的相关工单,并且任何新创建的工单也将与该模型实例相关联。

use Sgcomptech\FilamentTicketing\Tables\Actions\TicketAction;

public static function table(Table $table): Table
{
  return $table
		->columns([
			TextColumn::make('name'),
		])
		->actions([
			EditAction::make(),
			TicketAction::make('ticket'),
		]);
}

Table action

在您的项目中,您可以在多个模型上实现 HasTickets

Filament 管理面板菜单

与其他大多数 Filament 资源一样,您可以通过策略文件在管理面板菜单中控制并保护工单操作的访问权限。例如,您可以在 AuthServiceProvider 中创建一个新策略文件并将其注册。

protected $policies = [
  'Sgcomptech\FilamentTicketing\Models\Ticket' => 'App\Policies\TicketPolicy',
];

有关更多详细信息,请参阅 Laravel 模型策略

授权

此包有一个选项可以使用 Laravel 策略来授权对工单执行的各种操作。

除了常规的 Filament 资源策略之外,还需要实现以下附加权限

  1. manageAllTickets - 授予添加评论和更改任何工单状态的用户的权限。
  2. manageAssignedTickets - 授予只能添加评论和更改分配给他们的工单状态的用户的权限。
  3. assignTickets - 授予可以将工单分配给具有 manageAssignedTickets 权限的任何用户的权限。

例如,您可以使用其他授权包,如 Filament 用户身份验证,在策略文件中实现 TicketPolicies,如下所示

use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Sgcomptech\FilamentTicketing\Interfaces\TicketPolicies;
use Sgcomptech\FilamentTicketing\Models\Ticket;

class TicketPolicy implements TicketPolicies
{
  use HandlesAuthorization;

  public function viewAny(User $user)
  {
    return true;
  }

  public function view(User $user, Ticket $ticket)
  {
    return true;
  }

  public function create(User $user)
  {
    return true;
  }

  public function update(User $user, Ticket $ticket)
  {
    return $user->can('manage all tickets')
      || $user->can('assign tickets')
      || ($user->can('manage assigned tickets') && $ticket->assigned_to_id == $user->id)
      || $ticket->user_id == $user->id;
  }

  public function delete(User $user, Ticket $ticket)
  {
    return $user->can('Delete Tickets');
  }

  public function manageAllTickets($user): bool
  {
    return $user->can('Manage All Tickets');
  }

  public function manageAssignedTickets($user): bool
  {
    return $user->can('Manage Assigned Tickets');
  }

  public function assignTickets($user): bool
  {
    return $user->can('Assign Tickets');
  }
}

事件

此包将根据下表列出的表派发以下事件。请注意,这些事件的命名空间为 Sgcomptech\FilamentTicketing\Events

您可以使用这些事件向应用程序中的相关用户发送通知。有关如何 注册事件和监听器 的信息,请参阅 Laravel 文档。

测试

composer test

待办事项

  • 翻译
  • 列表工单筛选器
  • 徽章
  • 小部件
  • 将媒体或文件附加到工单

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

如果您想为 Filament Ticketing 软件包做出贡献,您可以在此仓库进行分支,创建一个新分支,进行更改并提交 PR。请确保运行测试脚本,以确保没有其他功能被破坏。更多详细信息请参阅 GitHub 快速入门指南

安全漏洞

如果您发现任何与安全相关的问题,请通过电子邮件 sgcomptechpteltd@gmail.com 联系我们,而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证(MIT)。更多信息请参阅 许可文件