This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

المستخدمون والأدوار والأذونات

يأتي SnapOtter مزوَّداً بثلاثة أدوار مدمجة، و17 إذناً دقيقاً، ودعم للأدوار المخصصة مع التحكم الاختياري في الوصول لكل أداة. تغطي هذه الصفحة نموذج التفويض الكامل، وتحديد نطاق مفاتيح API، وإدارة الفرق، وتسجيل التدقيق.

المستخدمون

إنشاء المستخدمين

يمكن للمسؤولين إنشاء المستخدمين عبر لوحة الإدارة أو نقطة النهاية POST /api/auth/register. لكل مستخدم اسم مستخدم ودور وتعيين فريق وعنوان بريد إلكتروني اختياري.

المسؤول الافتراضي

عند أول بدء تشغيل، يُنشئ SnapOtter حساب مسؤول افتراضياً. تأتي بيانات الاعتماد من متغيرات البيئة:

المتغيرالافتراضيالوصف
DEFAULT_USERNAMEadminاسم المستخدم لحساب المسؤول الأولي
DEFAULT_PASSWORDadminكلمة المرور لحساب المسؤول الأولي

يُطلب من المسؤول الافتراضي تغيير كلمة مروره عند أول تسجيل دخول.

مزودو المصادقة

يمكن للمستخدمين المصادقة عبر عدة طرق:

  • محلي - اسم مستخدم وكلمة مرور مُخزَّنان في قاعدة بيانات SnapOtter
  • OIDC - أي مزود OpenID Connect (انظر OIDC / SSO)
  • SAML - مزودو هوية SAML 2.0 (انظر SAML SSO)
  • SCIM - توفير آلي من مزود هوية (انظر توفير SCIM)

تعطيل المصادقة

اضبط AUTH_ENABLED=false لتعطيل المصادقة بالكامل. في هذا الوضع، يُستخدَم مستخدم مجهول اصطناعي بدور admin لجميع الطلبات. لا يلزم تسجيل الدخول.

WARNING

يمنح تعطيل المصادقة وصول المسؤول الكامل لأي شخص يمكنه الوصول إلى النسخة. استخدم هذا فقط في البيئات الموثوقة.

الأدوار المدمجة

يتضمن SnapOtter ثلاثة أدوار مدمجة. لا يمكن تعديلها أو حذفها.

المسؤول (Admin)

جميع الأذونات الـ 17. تحكم كامل في النسخة.

tools:use files:own files:all apikeys:own apikeys:all pipelines:own pipelines:all settings:read settings:write users:manage teams:manage features:manage system:health audit:read compliance:manage webhooks:manage security:manage

المحرر (Editor)

7 أذونات. يمكنه استخدام جميع الأدوات وإدارة جميع الملفات وخطوط الأنابيب، لكن لا يمكنه الوصول إلى وظائف الإدارة.

tools:use files:own files:all apikeys:own pipelines:own pipelines:all settings:read

المستخدم (User)

5 أذونات. يمكنه استخدام الأدوات وإدارة موارده الخاصة.

tools:use files:own apikeys:own pipelines:own settings:read

مرجع الأذونات

الإذنالوصف
tools:useاستخدام أي أداة معالجة
files:ownعرض وإدارة الملفات الخاصة
files:allعرض وإدارة ملفات جميع المستخدمين
apikeys:ownإنشاء وإدارة مفاتيح API الخاصة
apikeys:allعرض مفاتيح API لجميع المستخدمين
pipelines:ownإنشاء وإدارة خطوط الأنابيب الخاصة
pipelines:allعرض وإدارة خطوط أنابيب جميع المستخدمين
settings:readعرض إعدادات النسخة
settings:writeتعديل إعدادات النسخة
users:manageإنشاء وتحديث وحذف حسابات المستخدمين
teams:manageإنشاء وتحديث وحذف الفرق
features:manageتثبيت وإدارة حزم ميزات الذكاء الاصطناعي
system:healthالوصول إلى نقاط نهاية الصحة والجاهزية
audit:readعرض سجل التدقيق وسرد الأدوار
compliance:manageإدارة دورة حياة GDPR وميزات الامتثال
webhooks:manageتكوين خطافات الويب الصادرة
security:manageإدارة إعدادات الأمان (قائمة IP المسموح بها، فرض SSO)

الأدوار المخصصة

يمكن للمسؤولين الذين يملكون إذن security:manage إنشاء أدوار مخصصة عبر لوحة الإدارة أو واجهة برمجة الأدوار. يتطلب سرد الأدوار audit:read.

إنشاء دور مخصص

bash
curl -X POST http://localhost:1349/api/v1/roles \
  -H "Authorization: Bearer si_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "reviewer",
    "description": "Can use tools and view all files",
    "permissions": ["tools:use", "files:own", "files:all", "settings:read"]
  }'

يجب أن تكون أسماء الأدوار من 2 إلى 30 حرفاً، أحرف وأرقام صغيرة مع شرطات وشرطات سفلية.

الأذونات المحجوزة للمسؤول

ثلاثة أذونات محجوزة للأدوار المدمجة ولا يمكن تعيينها للأدوار المخصصة:

  • compliance:manage
  • webhooks:manage
  • security:manage

ترفض واجهة برمجة الأدوار أي طلب يتضمن هذه الأذونات. فقط الدور المدمج admin لديه الوصول إليها.

الأذونات على مستوى الأداة

يمكن للأدوار المخصصة اختيارياً تقييد الأدوات التي يمكن للمستخدمين الوصول إليها. يتوفر وضعان:

الوضعالسلوكمتطلب الترخيص
categoryالتقييد حسب النمط (صورة، فيديو، صوت، مستند، ملف)لا شيء (مجاني)
toolالتقييد حسب معرّف الأداة الفرديةيتطلب ميزة per_tool_permissions للمؤسسات

عند ضبط وضع tool لكن ميزة المؤسسات غير متاحة، يتراجع SnapOtter بلطف ويسمح بالوصول إلى جميع الأدوات.

json
{
  "name": "image-only",
  "permissions": ["tools:use", "files:own"],
  "toolPermissions": {
    "mode": "category",
    "allowed": ["image"]
  }
}

حذف دور مخصص

عند حذف دور مخصص، يُعاد تعيين جميع المستخدمين المُخصَّصين له تلقائياً إلى الدور user.

الفرق

تُجمّع الفرق المستخدمين لإدارة التخزين والاحتفاظ. يُنشأ فريق Default عند أول بدء تشغيل.

الحقلالنوعالوصف
namestringاسم فريق فريد (1-50 حرفاً)
storageQuotanumberحد تخزين لكل فريق بالبايت (يعمل دون المؤسسات)
retentionHoursnumberحذف تلقائي للمخرجات بعد هذا العدد من الساعات (يتطلب team_retention_overrides، للمؤسسات)
legalHoldbooleanمنع الحذف التلقائي لملفات أعضاء الفريق (يتطلب legal_hold، للمؤسسات)

INFO

لا يمكن حذف فريق Default. لا يمكن حذف الفرق التي لا تزال بها أعضاء. أعِد تعيين الأعضاء أولاً.

مفاتيح API

يمكن للمستخدمين توليد مفاتيح API للوصول البرمجي. يستخدم كل مفتاح البادئة si_ ويُعرَض مرة واحدة فقط وقت الإنشاء.

الأذونات ذات النطاق

يمكن لمفاتيح API اختيارياً حمل مصفوفة permissions. عند ضبطها، تكون الأذونات الفعّالة للطلب هي تقاطع أذونات دور المستخدم والأذونات ذات النطاق للمفتاح. يعني هذا أن مفتاح API لا يمكنه قط التصعيد بما يتجاوز أذونات المستخدم نفسه.

bash
curl -X POST http://localhost:1349/api/v1/api-keys \
  -H "Authorization: Bearer si_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "CI pipeline key",
    "permissions": ["tools:use", "files:own"],
    "expiresAt": "2027-01-01T00:00:00Z"
  }'

انتهاء الصلاحية

تقبل المفاتيح طابعاً زمنياً اختيارياً expiresAt. تُرفض المفاتيح منتهية الصلاحية وقت المصادقة.

سجل التدقيق

يسجّل SnapOtter الأحداث ذات الصلة بالأمان في سجل تدقيق مُهيكَل مُخزَّن في جدول قاعدة البيانات audit_log.

عرض سجل التدقيق

GET /api/v1/audit-log?page=1&limit=50&action=LOGIN_FAILED&from=2026-01-01T00:00:00Z&to=2026-12-31T23:59:59Z

يتطلب الإذن audit:read. يدعم الترقيم (page، limit) والمرشحات (action، ip، from، to).

تدقيق عمليات الأدوات

WARNING

أحداث TOOL_EXECUTED لا تُسجَّل افتراضياً. هي اختيارية عبر أحد مسارين:

  1. اضبط إعداد المسؤول auditToolOperations إلى true.
  2. احمل ترخيصاً نشطاً بميزة audit_export (متاح على خطتي الفريق والمؤسسات).

دون أحد هذين، لا تُسجَّل عمليات تنفيذ الأدوات الفردية في سجل التدقيق.

التصدير

GET /api/v1/enterprise/audit/export?format=csv&from=2026-01-01T00:00:00Z

يتطلب الإذن audit:read وميزة audit_export للمؤسسات (متاحة على خطتي الفريق والمؤسسات). يدعم تنسيقي CSV وJSON، مُرشَّحاً حسب action وactorId وtargetType وtargetId وfrom وto.

التوقيع المقاوم للتلاعب

عند التمكين، يُوقَّع كل إدخال في سجل التدقيق بـ HMAC مُشتَق من DATA_ENCRYPTION_KEY. يتطلب هذا:

  1. ضبط DATA_ENCRYPTION_KEY في بيئتك.
  2. تمكين إعداد المسؤول tamperResistantAudit.
  3. ترخيص مؤسسات بميزة tamper_resistant_audit.

الاحتفاظ

اضبط AUDIT_RETENTION_DAYS لتطهير الإدخالات القديمة تلقائياً. الافتراضي هو 0، مما يعني الاحتفاظ بالإدخالات إلى أجل غير مسمى.

مرجع الأحداث

الحدثالفئة
LOGIN_SUCCESS، LOGIN_FAILEDالمصادقة
OIDC_LOGIN_SUCCESS، OIDC_LOGIN_FAILEDالمصادقة
SAML_LOGIN_SUCCESS، SAML_LOGIN_FAILEDالمصادقة
LOGOUTالمصادقة
USER_CREATED، USER_UPDATED، USER_DELETEDإدارة المستخدمين
PASSWORD_CHANGED، PASSWORD_RESETإدارة المستخدمين
MFA_ENROLLED، MFA_DISABLED، MFA_VERIFIED، MFA_VERIFY_FAILEDMFA
MFA_CHALLENGE_ISSUED، MFA_RECOVERY_USED، MFA_RESETMFA
ROLE_CREATED، ROLE_UPDATED، ROLE_DELETEDالأدوار
API_KEY_CREATED، API_KEY_DELETEDمفاتيح API
SETTINGS_UPDATED، IP_ALLOWLIST_UPDATEDالإعدادات
FILE_UPLOADED، FILE_DELETEDالملفات
TOOL_EXECUTEDالأدوات (اختياري)
SCIM_USER_PROVISIONED، SCIM_USER_UPDATED، SCIM_USER_DEPROVISIONEDSCIM
SCIM_GROUP_SYNCEDSCIM
LEGAL_HOLD_APPLIED، LEGAL_HOLD_RELEASEDالامتثال
GDPR_EXPORT_INITIATED، GDPR_USER_PURGED، GDPR_TEAM_PURGEDالامتثال
CONFIG_EXPORTED، CONFIG_IMPORTEDالتكوين

إدارة الجلسات

الجلسات مبنية على ملفات تعريف الارتباط، ويتحكم بها SESSION_DURATION_HOURS (الافتراضي: 168 ساعة / 7 أيام).

تغييرات الأدوار تُبطل الجلسات

عندما يغيّر المسؤول دور مستخدم، تُحذف جميع جلسات ذلك المستخدم النشطة. يجب على المستخدم تسجيل الدخول مجدداً لاستلام أذوناته الجديدة.

حراس السلامة

  • حماية آخر مسؤول: لا يمكن خفض رتبة آخر مسؤول متبقٍّ إلى دور أدنى. تعيد واجهة API خطأً إن حاولت.
  • منع الحذف الذاتي: لا يمكن للمسؤولين حذف حساباتهم الخاصة عبر واجهة API.