Configuration

گروه‌های دسترسی

گروه‌های دسترسی، فهرست‌های نام‌گذاری‌شده‌ای از فرستندگان هستند که یک‌بار در accessGroups تعریف می‌کنید و با accessGroup:<name> از فهرست‌های مجاز کانال‌ها به آن‌ها ارجاع می‌دهید.

از آن‌ها زمانی استفاده کنید که باید به افراد یکسانی در چند کانال پیام‌رسان اجازه داده شود، یا هنگامی که یک مجموعهٔ مورد اعتماد باید هم برای مجوزدهی پیام‌های مستقیم و هم برای فرستندگان گروه اعمال شود.

یک گروه به‌خودی‌خود هیچ مجوزی اعطا نمی‌کند. فقط جایی اهمیت دارد که یک فیلد فهرست مجاز به آن ارجاع دهد.

گروه‌های ایستای فرستندگان پیام

گروه‌های ایستای فرستندگان از type: "message.senders" استفاده می‌کنند. کلیدهای members شناسه‌های کانال‌های پیام‌رسان هستند و برای ورودی‌های مشترک میان همهٔ کانال‌ها از "*" استفاده می‌شود:

json5
{  accessGroups: {    operators: {      type: "message.senders",      members: {        "*": ["global-owner-id"],        discord: ["discord:123456789012345678"],        telegram: ["987654321"],        whatsapp: ["+15551234567"],      },    },  },}
کلید معنا
"*" ورودی‌های مشترکی که برای هر کانال پیام‌رسان ارجاع‌دهنده به گروه بررسی می‌شوند.
discord, telegram, ... ورودی‌هایی که فقط هنگام تطبیق فهرست مجاز همان کانال بررسی می‌شوند.

ورودی‌ها با قواعد عادی allowFrom کانال مقصد تطبیق داده می‌شوند. OpenClaw شناسه‌های فرستندگان را میان کانال‌ها تبدیل نمی‌کند: اگر آلیس یک شناسهٔ Telegram و یک شناسهٔ Discord دارد، هر دو شناسه را زیر کلید کانال متناظر فهرست کنید.

ارجاع به گروه‌ها از فهرست‌های مجاز

هرجا مسیر کانال پیام‌رسان از فهرست مجاز فرستندگان پشتیبانی می‌کند، با accessGroup:<name> به گروه ارجاع دهید.

نمونهٔ فهرست مجاز پیام مستقیم:

json5
{  accessGroups: {    operators: {      type: "message.senders",      members: {        discord: ["discord:123456789012345678"],        telegram: ["987654321"],      },    },  },  channels: {    discord: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:operators"],    },    telegram: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:operators"],    },  },}

نمونهٔ فهرست مجاز فرستندگان گروه:

json5
{  accessGroups: {    oncall: {      type: "message.senders",      members: {        whatsapp: ["+15551234567"],        googlechat: ["users/1234567890"],      },    },  },  channels: {    whatsapp: {      groupPolicy: "allowlist",      groupAllowFrom: ["accessGroup:oncall"],    },    googlechat: {      groups: {        "spaces/AAA": {          users: ["accessGroup:oncall"],        },      },    },  },}

می‌توانید گروه‌ها و ورودی‌های مستقیم را با هم ترکیب کنید:

json5
{  channels: {    discord: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:operators", "discord:123456789012345678"],    },  },}

مسیرهای پشتیبانی‌شدهٔ کانال‌های پیام‌رسان

گروه‌های دسترسی در مسیرهای مشترک مجوزدهی کانال‌های پیام‌رسان کار می‌کنند:

  • فهرست‌های مجاز فرستندگان پیام مستقیم، مانند channels.<channel>.allowFrom
  • فهرست‌های مجاز فرستندگان گروه، مانند channels.<channel>.groupAllowFrom
  • فهرست‌های مجاز فرستندگان مختص هر اتاق در یک کانال که از همان قواعد تطبیق فرستنده استفاده می‌کنند؛ برای مثال groups.<space>.users در Google Chat
  • مسیرهای مجوزدهی فرمان که از فهرست‌های مجاز فرستندگان کانال پیام‌رسان دوباره استفاده می‌کنند

پشتیبانی هر کانال به این بستگی دارد که آیا آن کانال به کمک‌تابع‌های مشترک مجوزدهی فرستنده در OpenClaw متصل شده است یا نه. پشتیبانی فعلیِ همراه شامل ClickClack، Discord، Feishu، Google Chat، iMessage، IRC، LINE، Mattermost، Microsoft Teams، Nextcloud Talk، Nostr، QQ Bot، Signal، Slack، SMS، Telegram، WhatsApp، Zalo و Zalo Personal است. گروه‌های ایستای message.senders مستقل از کانال هستند؛ بنابراین کانال‌های پیام‌رسان جدید با استفاده از کمک‌تابع‌های ورودیِ مشترک SDK افزونه، به‌جای گسترش سفارشی فهرست مجاز، از آن‌ها بهره‌مند می‌شوند.

مخاطبان کانال Discord

Discord همچنین از یک نوع پویای گروه دسترسی پشتیبانی می‌کند:

json5
{  accessGroups: {    maintainers: {      type: "discord.channelAudience",      guildId: "1456350064065904867",      channelId: "1456744319972282449",      membership: "canViewChannel",    },  },  channels: {    discord: {      dmPolicy: "allowlist",      allowFrom: ["accessGroup:maintainers"],    },  },}

discord.channelAudience یعنی «به فرستندگان پیام مستقیم Discord که در حال حاضر می‌توانند این کانال انجمن را ببینند، اجازه بده». OpenClaw هنگام مجوزدهی، فرستنده را از طریق Discord شناسایی می‌کند و قواعد مجوز ViewChannel در Discord را اعمال می‌کند. membership اختیاری است و مقدار پیش‌فرض آن canViewChannel است.

زمانی از این قابلیت استفاده کنید که یک کانال Discord از قبل منبع حقیقت یک تیم است، مانند #maintainers یا #on-call.

الزامات و رفتار هنگام شکست:

  • ربات باید به انجمن و کانال دسترسی داشته باشد.
  • ربات در Discord Developer Portal به Server Members Intent نیاز دارد.
  • اگر Discord پاسخ Missing Access برگرداند، فرستنده به‌عنوان عضو انجمن قابل شناسایی نباشد، یا کانال متعلق به انجمن دیگری باشد، گروه دسترسی به‌صورت بسته و بدون اعطای مجوز شکست می‌خورد.

نمونه‌های بیشتر مخصوص Discord: کنترل دسترسی Discord

عیب‌یابی Plugin

نویسندگان Plugin می‌توانند وضعیت ساختاریافتهٔ گروه دسترسی را بدون گسترش دوبارهٔ آن به یک فهرست مجاز تخت بررسی کنند:

typescript
 const state = await resolveAccessGroupAllowFromState({  accessGroups: cfg.accessGroups,  allowFrom: channelConfig.allowFrom,  channel: "my-channel",  accountId: "default",  senderId,  isSenderAllowed,});

نتیجه گروه‌های ارجاع‌شده، تطبیق‌یافته، مفقود، پشتیبانی‌نشده و ناموفق را گزارش می‌کند. از آن برای عیب‌یابی یا آزمون‌های انطباق استفاده کنید. فقط برای مسیرهای سازگاری که همچنان انتظار یک آرایهٔ تخت allowFrom را دارند، از expandAllowFromWithAccessGroups(...) استفاده کنید.

نکات امنیتی

  • گروه‌های دسترسی نام‌های مستعار فهرست مجاز هستند، نه نقش‌ها. آن‌ها به‌خودی‌خود مالک ایجاد نمی‌کنند، درخواست‌های جفت‌سازی را تأیید نمی‌کنند و مجوز ابزار اعطا نمی‌کنند.
  • dmPolicy: "open" همچنان به "*" در فهرست مجاز مؤثر پیام مستقیم نیاز دارد. ارجاع به یک گروه دسترسی با دسترسی عمومی یکسان نیست.
  • نام‌های مفقود گروه به‌صورت بسته شکست می‌خورند. اگر allowFrom شامل accessGroup:operators باشد و accessGroups.operators وجود نداشته باشد، آن ورودی به هیچ‌کس مجوز نمی‌دهد.
  • شناسه‌های کانال را پایدار نگه دارید. اگر کانال از هر دو پشتیبانی می‌کند، شناسه‌های عددی یا شناسه‌های کاربر را به نام‌های نمایشی ترجیح دهید.

رفع اشکال

اگر یک فرستنده باید تطبیق پیدا کند اما مسدود شده است:

  1. تأیید کنید که فیلد فهرست مجاز شامل ارجاع دقیق accessGroup:<name> است.
  2. تأیید کنید که accessGroups.<name>.type درست است.
  3. تأیید کنید که شناسهٔ فرستنده زیر کلید کانال متناظر یا زیر "*" فهرست شده است.
  4. تأیید کنید که ورودی از نحو عادی فهرست مجاز همان کانال استفاده می‌کند.
  5. برای مخاطبان کانال Discord، تأیید کنید که ربات می‌تواند کانال انجمن را ببیند و Server Members Intent فعال است.

پس از ویرایش پیکربندی کنترل دسترسی، openclaw doctor را اجرا کنید. این فرمان بسیاری از ترکیب‌های نامعتبر فهرست مجاز و سیاست را پیش از زمان اجرا شناسایی می‌کند.

Was this useful?
On this page

On this page