'array', 'naming_rules' => 'array', ]; protected static function booted(): void { static::addGlobalScope(new CompanyScope); } /** * ACL 访问控制作用域 * * @param Builder $query * @param string $id 单个操作时使用,限制范围 * @return void */ public function scopeAllowed(Builder $query, string $id = null): void { $taskIds = Task::query()->leftJoin("team_members", "tasks.project_id", "=", "team_members.project_id") ->when($id == null, fn($query) => $query->filter(request()->query())) ->when($id, fn($query) => $query->where("tasks.id", $id)) ->where(function($query) { $query->where("team_members.user_id", Auth::id()) ->orWhere(fn($query) => $query->where("tasks.acl", TaskACL::CUSTOM->value)->where("whitelist", "like", "%,".Auth::id().",%")); }) ->pluck("tasks.id") ->unique(); $query->whereIn("id", $taskIds->toArray()); } public function requirement(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Requirement::class); } public function project(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Project::class); } public function namingRule(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(NamingRule::class); } public function createdBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'created_by'); } public function reviewBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'review_by'); } public function finishedBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'finished_by'); } public function approveBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'approve_by'); } public function canceledBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'canceled_by'); } public function children(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(Task::class, 'parent_id'); } public function closedBy(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'closed_by'); } public function assignTo(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(User::class, 'assign'); } }