mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-22 17:58:11 +00:00
- 表结构:为 file/project/task_vectors 添加 allowed_users MULTI 字段 - 删除关系表:file_users, project_users, task_users - 搜索:使用 allowed_users = userid 进行权限过滤 - 同步:sync 时自动计算并写入 allowed_users - 级联:项目成员变更异步级联 v=1 任务,任务成员变更递归更新子任务 - 覆盖场景:visibility/parent_id/project_id 变更、子任务升级主任务等
88 lines
2.5 KiB
PHP
88 lines
2.5 KiB
PHP
<?php
|
||
|
||
namespace App\Observers;
|
||
|
||
use App\Models\Deleted;
|
||
use App\Models\ProjectTaskUser;
|
||
use App\Models\ProjectUser;
|
||
use App\Tasks\ManticoreSyncTask;
|
||
|
||
class ProjectTaskUserObserver extends AbstractObserver
|
||
{
|
||
/**
|
||
* Handle the ProjectTaskUser "created" event.
|
||
*
|
||
* @param \App\Models\ProjectTaskUser $projectTaskUser
|
||
* @return void
|
||
*/
|
||
public function created(ProjectTaskUser $projectTaskUser)
|
||
{
|
||
Deleted::forget('projectTask', $projectTaskUser->task_id, $projectTaskUser->userid);
|
||
if ($projectTaskUser->task_pid) {
|
||
Deleted::forget('projectTask', $projectTaskUser->task_pid, $projectTaskUser->userid);
|
||
}
|
||
|
||
// MVA 方案:更新任务的 allowed_users(会自动 cascadeToChildren)
|
||
self::taskDeliver(new ManticoreSyncTask('update_task_allowed_users', [
|
||
'task_id' => $projectTaskUser->task_id,
|
||
]));
|
||
// 如果是子任务,也更新父任务
|
||
if ($projectTaskUser->task_pid) {
|
||
self::taskDeliver(new ManticoreSyncTask('update_task_allowed_users', [
|
||
'task_id' => $projectTaskUser->task_pid,
|
||
]));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Handle the ProjectTaskUser "updated" event.
|
||
*
|
||
* @param \App\Models\ProjectTaskUser $projectTaskUser
|
||
* @return void
|
||
*/
|
||
public function updated(ProjectTaskUser $projectTaskUser)
|
||
{
|
||
//
|
||
}
|
||
|
||
/**
|
||
* Handle the ProjectTaskUser "deleted" event.
|
||
*
|
||
* @param \App\Models\ProjectTaskUser $projectTaskUser
|
||
* @return void
|
||
*/
|
||
public function deleted(ProjectTaskUser $projectTaskUser)
|
||
{
|
||
if (!ProjectUser::whereProjectId($projectTaskUser->project_id)->whereUserid($projectTaskUser->userid)->exists()) {
|
||
Deleted::record('projectTask', $projectTaskUser->task_id, $projectTaskUser->userid);
|
||
}
|
||
|
||
// MVA 方案:更新任务的 allowed_users(会自动 cascadeToChildren)
|
||
self::taskDeliver(new ManticoreSyncTask('update_task_allowed_users', [
|
||
'task_id' => $projectTaskUser->task_id,
|
||
]));
|
||
}
|
||
|
||
/**
|
||
* Handle the ProjectTaskUser "restored" event.
|
||
*
|
||
* @param \App\Models\ProjectTaskUser $projectTaskUser
|
||
* @return void
|
||
*/
|
||
public function restored(ProjectTaskUser $projectTaskUser)
|
||
{
|
||
//
|
||
}
|
||
|
||
/**
|
||
* Handle the ProjectTaskUser "force deleted" event.
|
||
*
|
||
* @param \App\Models\ProjectTaskUser $projectTaskUser
|
||
* @return void
|
||
*/
|
||
public function forceDeleted(ProjectTaskUser $projectTaskUser)
|
||
{
|
||
//
|
||
}
|
||
}
|