إدارة المستخدمين
إدارة الموسِّمين في Potato عبر قوائم الوصول في user_config، وتسجيل الدخول المباشر عبر URL، وأدوار RBAC وصلاحياته، وحصص العمل لكل موسِّم، ومراحل التدريب.
يحسم Potato ثلاثة أمور منفصلة بشأن كل شخص: هل يحق له التسجيل، وما المسموح له فعله بعد الدخول، وما مقدار العمل الذي يُسند إليه. لكل أمر منها كتلة إعدادات مختلفة، والخلط بينها هو السبب المعتاد لموسِّم يستطيع تسجيل الدخول لكنه لا يتلقى أي عنصر.
أنماط الوصول
الوصول المفتوح
يسمح Potato بالتسجيل الذاتي افتراضيًا، فينشئ الموسِّم الجديد حسابه بنفسه من صفحة تسجيل الدخول:
user_config:
allow_all_users: trueالوصول المقيد
اضبط allow_all_users: false وأدرج العناوين المسموح لها بالتسجيل. لا يستطيع أحد غيرها إنشاء حساب:
user_config:
allow_all_users: false
users:
- alice@example.com
- bob@example.com
- researcher@university.eduيقع المفتاحان كلاهما تحت user_config. وإذا كُتبا في المستوى الأعلى فإنهما يُتجاهَلان دون أي تنبيه، فتبدو قائمة الوصول موجودة وهي لا تفعل شيئًا.
المصادقة
تسجيل الدخول بكلمة مرور
هذا هو الخيار الافتراضي. يسجل الموسِّمون ببريد إلكتروني وكلمة مرور، ويخزّنها Potato في صورة تجزئة PBKDF2 مملّحة بملح خاص بكل مستخدم.
login:
type: passwordتسجيل الدخول المباشر بوسيط في URL
يأخذ url_direct اسم المستخدم مباشرة من معامل في URL ولا يطلب كلمة مرور، وهكذا يُتعامل مع المشاركين القادمين من منصات التعهيد الجماعي:
login:
type: url_direct
url_argument: PROLIFIC_PIDيصل الموسِّمون عندئذ إلى http://your-server:8000/?PROLIFIC_PID=abc123 ويُسجَّل دخولهم باسم abc123.
يقبل url_argument أيضًا قائمة، وفي هذه الحالة يُسمّى مجلد مخرجات الموسِّم بضم القيم معًا:
login:
type: url_direct
url_argument:
- PROLIFIC_PID
- STUDY_ID
- SESSION_IDأنواع تسجيل الدخول الثلاثة هي password وurl_direct وprolific، ويضيف الأخير تكاملًا مع واجهة Prolific البرمجية فوق تسجيل الدخول المباشر عبر URL. راجع تكامل التعهيد الجماعي للجانب الخاص بالمنصة.
تعطيل كلمة المرور أو نموذج تسجيل الدخول
يسجّل كل موسِّم دخوله باسم مستخدم، لأن Potato يحفظ تسميات كل موسِّم في مجلد يحمل اسمه داخل output_annotation_dir. لا يوجد إعداد يُلغي هذه الخطوة. يُسقط إعدادان كلمة المرور منها، والثاني يُلغي النموذج أيضًا.
عند ضبط require_password: false في المستوى الأعلى من الإعدادات، لا يطلب نموذج تسجيل الدخول إلا اسم المستخدم. يسجّل Potato في الحال أي اسم لم يره من قبل، ويعيد الاسم الذي رآه إلى عمل ذلك الموسِّم:
require_password: falseلذلك فإن من يكتب اسم مستخدم موجودًا يواصل جلسة ذلك الموسِّم، فلا تعطّل كلمة المرور إلا حين يثق الموسِّمون ببعضهم أو يكون رابط المهمة خاصًا. تظل قائمة المستخدمين سارية في هذا الوضع، ومع user_config.allow_all_users: false يُرفض أي اسم غير موجود في users. ولإلغاء النموذج أيضًا، استخدم تسجيل الدخول url_direct وأرسل إلى كل موسِّم رابطًا يحمل اسم المستخدم الخاص به. تسرد صفحة تسجيل الدخول بدون كلمة مرور واجهات المصادقة الخلفية التي تعمل بدون كلمة مرور.
الأدوار والصلاحيات
مفتاح الإدارة المشترك
admin_api_key مفتاح واحد مشترك يُرسل في الترويسة X-API-Key، ويتجاوز كل فحوص الصلاحيات. وإذا لم يُضبط، يولّد Potato مفتاحًا ويكتبه في {task_dir}/admin_api_key.txt.
admin_api_key: "your-shared-key"التحكم في الوصول القائم على الأدوار
مع كتلة rbac، يصل أشخاص محددون بالاسم إلى لوحة الإدارة بتسجيل الدخول المعتاد، دون أن يحملوا المفتاح المشترك:
rbac:
enabled: true
# Custom roles, merged over the built-in ones
roles:
lead: [view_admin_dashboard, export_data, annotate]
# Assign roles to specific users
user_role_assignments:
carol@example.com: admin
dave@example.com: lead
# Map an SSO claim to a role
sso_role_mapping:
"org:my-github-org": adjudicatorالصلاحيات هي view_admin_dashboard وmanage_assignment وadjudicate وexport_data وannotate. يملك الدور المدمج admin الخمس كلها، ويملك adjudicator كلًا من adjudicate وexport_data وannotate، ويملك annotator الصلاحية annotate.
صلاحيات المستخدم هي اتحاد صلاحيات كل الأدوار التي يحملها. وفي غياب كتلة rbac تمامًا، لا يمنح وصولًا مرتفعًا سوى المفتاح المشترك وقائمة adjudication.adjudicator_users، وبهذا تظل المشاريع المكتوبة قبل RBAC تعمل.
عبء العمل
الحد الأقصى لكل موسِّم
يضبط max_annotations_per_user رقمًا واحدًا للجميع:
max_annotations_per_user: 100ويضبط per_annotator_quota أرقامًا مختلفة لأشخاص مختلفين. يقبل default وby_user وby_user_role، ويرفض أي مفتاح فرعي آخر عند التحميل بدلًا من تجاهله:
per_annotator_quota:
default: 50
by_user:
alice@example.com: 200
by_user_role:
expert: 150
novice: 40يُحدَّد الحد بالرجوع أولًا إلى by_user، ثم إلى by_user_role، ثم إلى default. وتأتي تسميات الأدوار من user_roles:
user_roles:
alice@example.com: expert
bob@example.com: noviceالتسمية هنا تسمية لعبء العمل فقط، ولا تمنح صلاحيات إلا إذا كانت تسمّي أيضًا دورًا في rbac.roles. لذلك يبقى expert وnovice مجرد تسميات للحصص لا أكثر.
عدد الموسِّمين لكل عنصر
يحدد num_annotators_per_item عدد الأشخاص الذين يرون كل عنصر، وهذا ما يقرر إن كان بإمكانك الإبلاغ عن الاتفاق في النهاية:
num_annotators_per_item: 3
min_annotators_per_instance: 2max_annotations_per_item اسم بديل مهمل للحد نفسه. وإذا ضُبط الاثنان على قيمتين مختلفتين، تُرفض الإعدادات عند التحميل بدلًا من حسم التعارض دون تنبيه.
استراتيجية الإسناد
assignment_strategy: random
random_seed: 1234الاستراتيجيات هي random وfixed_order وleast_annotated وmax_diversity وdiversity_clustering وcategory_based وbatch وpriority وmodel_review وllm_confidence وpsychometric وactive_learning. القيمة الافتراضية لـ random_seed هي 1234، لذا ثبّتها حين يجب أن يكون التشغيل قابلًا لإعادة الإنتاج. راجع إسناد المهام لمعرفة ما تفعله كل استراتيجية.
تأهيل الموسِّمين
تعرض مرحلة التدريب على الموسِّمين عناصر تدريبية معروفة الإجابات قبل المهمة الفعلية، ويقرر passing_criteria من يواصل:
training:
enabled: true
data_file: data/training.json
passing_criteria:
min_correct: 8
max_mistakes: 2
max_mistakes_per_question: 1
allow_retry: true
failure_action: blockراجع مرحلة التدريب لصيغة العناصر وخيارات التغذية الراجعة.
فحص الانتباه أثناء المهمة
يصفّي التدريب الأشخاص في البداية، أما فحوص الانتباه فتواصل القياس بعد أن يبدأ العمل الفعلي:
attention_checks:
enabled: true
items_file: data/attention_checks.json
frequency: 10
min_response_time: 3.0
failure_handling:
warn_threshold: 2
warn_message: "Please read items carefully before answering."
block_threshold: 5
block_message: "You have been blocked due to too many incorrect responses."راجع ضبط الجودة للمعايير الذهبية وتقارير الاتفاق.
الجلسات
secret_key: "a-long-random-string"
session_timeout_minutes: 60
persist_sessions: true
session_lifetime_days: 7يوقّع secret_key ملف تعريف الارتباط الخاص بالجلسة، ويمكن أن يأتي بدلًا من ذلك من متغير البيئة POTATO_SECRET_KEY. ومن دونه يولّد Potato مفتاحًا جديدًا عند كل تشغيل، فيُسجَّل خروج الجميع مع كل إعادة تشغيل.
يمسح session_timeout_minutes الجلسة التي بقيت خاملة هذه المدة، ويبدأ العدّ من جديد مع كل طلب. وPotato 2.11 هو أول إصدار يطبّقه فعليًا، بقيمة افتراضية قدرها 480 دقيقة. وعند 60، كما في هذا المثال، يتعيّن على المعلّق الذي يبتعد ساعة أن يسجّل الدخول من جديد حين يعود.
مثال: إعداد لفريق بحثي
annotation_task_name: "Sentiment Annotation"
task_dir: .
user_config:
allow_all_users: false
users:
- researcher1@university.edu
- researcher2@university.edu
- student1@university.edu
- student2@university.edu
rbac:
enabled: true
user_role_assignments:
researcher1@university.edu: admin
user_roles:
researcher1@university.edu: expert
student1@university.edu: novice
per_annotator_quota:
default: 200
by_user_role:
expert: 300
novice: 120
num_annotators_per_item: 2
assignment_strategy: least_annotated
data_files:
- data/main.json
item_properties:
id_key: id
text_key: text
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment of this text?"
labels:
- Positive
- Negative
- Neutral
sequential_key_binding: true
output_annotation_dir: annotation_output/مثال: إعداد للتعهيد الجماعي
annotation_task_name: "Sentiment Annotation Study"
task_dir: .
login:
type: url_direct
url_argument: PROLIFIC_PID
completion_code: "POTATO2024"
user_config:
allow_all_users: true
max_annotations_per_user: 50
num_annotators_per_item: 3
assignment_strategy: random
hide_navbar: true
jumping_to_id_disabled: true
attention_checks:
enabled: true
items_file: data/attention_checks.json
frequency: 10
failure_handling:
warn_threshold: 2
block_threshold: 5
data_files:
- data/main.json
item_properties:
id_key: id
text_key: text
output_annotation_dir: annotation_output/قراءات إضافية
- تسجيل الدخول بدون كلمة مرور - مصادقة قائمة على URL
- إسناد المهام - التحكم في توزيع التوسيم
- تكامل التعهيد الجماعي - Prolific وSONA ولوحات مشاركين أخرى
- مرحلة التدريب - تأهيل الموسِّمين قبل المهمة
لتفاصيل التنفيذ، راجع الوثائق المصدرية ومرجع الأدوار والصلاحيات.