mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-21 08:28:12 +00:00
修复 Manticore 搜索索引在特定场景下 allowed_users 权限未能正确同步的问题:
Observer.updated 补充:
- ProjectUserObserver: 处理项目成员移交时的权限级联
- ProjectTaskUserObserver: 处理任务成员移交时的权限更新
批量操作绕过 Observer 修复(delete → remove):
- FileUser: deleteFileAll/deleteFileUser 方法
- ProjectTask: 可见性设置时的批量删除
- ProjectController: 子任务升级和任务复制时的批量删除
文件批量更新封装:
- File 新增 updateChildFilesUserid() 方法,统一处理子文件 userid
更新及 Manticore 同步
92 lines
2.6 KiB
PHP
92 lines
2.6 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);
|
|
|
|
// 更新项目权限
|
|
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)
|
|
{
|
|
// userid 变更时需要更新项目权限和级联任务权限(移交场景)
|
|
if ($projectUser->isDirty('userid')) {
|
|
self::taskDeliver(new ManticoreSyncTask('update_project_allowed_users', [
|
|
'project_id' => $projectUser->project_id,
|
|
]));
|
|
self::taskDeliver(new ManticoreSyncTask('cascade_project_users', [
|
|
'project_id' => $projectUser->project_id,
|
|
]));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
|
|
// 更新项目权限
|
|
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)
|
|
{
|
|
//
|
|
}
|
|
}
|