dootask/app/Observers/ProjectUserObserver.php
kuaifan c08323e1ea feat: 迁移至 MVA 权限方案
- 表结构:为 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 变更、子任务升级主任务等
2026-01-02 02:03:21 +00:00

84 lines
2.2 KiB
PHP

<?php
namespace App\Observers;
use App\Models\Deleted;
use App\Models\ProjectUser;
use App\Tasks\ManticoreSyncTask;
class ProjectUserObserver extends AbstractObserver
{
/**
* Handle the ProjectUser "created" event.
*
* @param \App\Models\ProjectUser $projectUser
* @return void
*/
public function created(ProjectUser $projectUser)
{
Deleted::forget('project', $projectUser->project_id, $projectUser->userid);
// MVA 方案:更新项目的 allowed_users
self::taskDeliver(new ManticoreSyncTask('update_project_allowed_users', [
'project_id' => $projectUser->project_id,
]));
// 异步级联更新该项目下所有 visibility=1 的任务
self::taskDeliver(new ManticoreSyncTask('cascade_project_users', [
'project_id' => $projectUser->project_id,
]));
}
/**
* Handle the ProjectUser "updated" event.
*
* @param \App\Models\ProjectUser $projectUser
* @return void
*/
public function updated(ProjectUser $projectUser)
{
//
}
/**
* Handle the ProjectUser "deleted" event.
*
* @param \App\Models\ProjectUser $projectUser
* @return void
*/
public function deleted(ProjectUser $projectUser)
{
Deleted::record('project', $projectUser->project_id, $projectUser->userid);
// MVA 方案:更新项目的 allowed_users
self::taskDeliver(new ManticoreSyncTask('update_project_allowed_users', [
'project_id' => $projectUser->project_id,
]));
// 异步级联更新该项目下所有 visibility=1 的任务
self::taskDeliver(new ManticoreSyncTask('cascade_project_users', [
'project_id' => $projectUser->project_id,
]));
}
/**
* Handle the ProjectUser "restored" event.
*
* @param \App\Models\ProjectUser $projectUser
* @return void
*/
public function restored(ProjectUser $projectUser)
{
//
}
/**
* Handle the ProjectUser "force deleted" event.
*
* @param \App\Models\ProjectUser $projectUser
* @return void
*/
public function forceDeleted(ProjectUser $projectUser)
{
//
}
}