24 lines
875 B
TypeScript
24 lines
875 B
TypeScript
import type { ActivityDto, ActivityEditPolicy } from '@mento/shared';
|
|||
|
|
|
||
|
|
type ActivityAccessUser = {
|
||
|
|
id?: string | null;
|
||
|
|
role?: string | null;
|
||
|
|
} | null | undefined;
|
||
|
|
|
||
|
|
/** ویرایش/حذف فیلدهای فعالیت — انجام/جابهجایی ستون جداست */
|
||
|
|
export function canMutateActivity(
|
||
|
|
activity: Pick<
|
||
|
|
ActivityDto,
|
||
|
|
'editPolicy' | 'createdBy' | 'assignee' | 'assignees'
|
||
|
|
> | null | undefined,
|
||
|
|
user: ActivityAccessUser,
|
||
|
|
): boolean {
|
||
|
|
if (!activity || !user?.id) return false;
|
||
|
|
if (user.role === 'owner' || user.role === 'admin') return true;
|
||
|
|
if (activity.createdBy?.id === user.id) return true;
|
||
|
|
const policy: ActivityEditPolicy = activity.editPolicy ?? 'creator';
|
||
|
|
if (policy !== 'assignees') return false;
|
||
|
|
if (activity.assignee?.id === user.id) return true;
|
||
|
|
return (activity.assignees ?? []).some((a) => a.id === user.id);
|
||
|
|
}
|