المستودعات والمجموعات والصلاحيات
حدّد من يستطيع البناء من مستودع، وأدِر مجموعات الصلاحيات، واعرف من يملك ماذا، من الطرفية.
مجموعتان من الأوامر تغطّيان الوصول. يحدّد isogrid repos من في المؤسّسة يستطيع
استخدام مستودع مربوط. ويسرد isogrid iam الأعضاء ويدير مجموعات الصلاحيات.
كلاهما يفعل ما تفعله صفحات الوصول في وحدة التحكّم، فيمكن أتمتتهما في سكربت: لضمّ
فريق جديد، أو لمراجعة من يملك ماذا.
الأفكار التي تقوم عليها مشروحة في الأدوار ومجموعات الصلاحيات والوصول و مستودعات Git. وهذه الصفحة للأوامر.
المستودعات: isogrid repos
يستجيب repos أيضًا لـ repo وrepositories. يُشار إلى المستودع باسمه الكامل
(acme/api، أو platform/backend/api لمشروع GitLab داخل مجموعات متداخلة)، أو
بعنوان تلصقه من المتصفّح، أو بـ id الخاص به.
سردها
isogrid repos list [--provider github|gitlab] [--search TEXT] [--json]
REPOSITORY PROVIDER ACCESS OWNER YOU
acme/api github organization samir@acme.example view,create-app,deploy,update,delete,share
acme/website github private (default) aziz@acme.example view,create-app,deploy
platform/billing gitlab administrators lina@acme.example view
- ACCESS هو من يستطيع الوصول إلى المستودع:
privateأوadministratorsأوorganization. وتعني(default)أن المستودع ليس له إعداد خاص به ويتبع الإعداد الافتراضي لاتصاله. - OWNER هو العضو الذي يأتي المستودع عبر حسابه في GitHub أو GitLab. وهو من يقرّر من غيره يجوز له استخدامه.
- YOU هو ما يجوز لك فعله به، دون البادئة
repo:.
لا تُسرد إلا المستودعات التي تستطيع رؤيتها. المستودع الخاص لزميلك لا يُسرد ولا يستجيب لاسمه أيضًا، ما لم يمنحك إيّاه.
تحديد من يستطيع الوصول إلى مستودع
isogrid repos access <repo> [--visibility private|administrators|organization|inherit]
[--org-capabilities CAP,...]
--visibility |
من يستطيع الوصول إليه |
|---|---|
private |
المالك، وكل من مُنح إيّاه. |
administrators |
إضافةً إلى مالك المؤسّسة ومسؤوليها. |
organization |
إضافةً إلى كل عضو، بالقدرات المحدّدة في --org-capabilities. |
inherit |
يزيل إعداد المستودع الخاص ويتبع الإعداد الافتراضي للاتصال. |
--org-capabilities هو ما يملكه كل عضو تحت organization. ودونه، يجوز للأعضاء
رؤيته، وإنشاء تطبيقات منه، ونشرها، وتعديل إعداداتها، لكن لا حذف تطبيقات الآخرين
ولا مشاركته مع غيرهم.
لا يستطيع تغيير هذا إلا المالك، أو مسؤول بعد أن يغادر المالك المؤسّسة.
# Open the API to everyone, but only to deploy what exists
isogrid repos access acme/api --visibility organization \
--org-capabilities repo:view,repo:deploy
# Close it again
isogrid repos access acme/api --visibility private
منحه لعضو أو لمجموعة
isogrid repos grant <repo> (--member EMAIL | --group SLUG) [--preset NAME] [--capabilities CAP,...]
أعطِ إعدادًا مسبقًا (preset)، أو قائمة قدرات، أو كليهما؛ فيُمنح اتّحادهما.
| الإعداد المسبق | القدرات |
|---|---|
repo-viewer |
repo:view |
repo-deployer |
repo:view، repo:create-app، repo:deploy |
repo-maintainer |
ما سبق، وrepo:update |
repo-admin |
ما سبق، وrepo:delete |
لا يتضمّن أي إعداد مسبق repo:share: فقرار من يدخل أيضًا يبقى لمن ربط الحساب.
ولا يمكنك أن تمنح إلا قدرات تملكها أنت.
# A contractor who may deploy the applications built from the API
isogrid repos grant acme/api --member contractor@partner.example --preset repo-deployer
# The QA group may see the code and redeploy, but not create applications
isogrid repos grant acme/api --group qa --capabilities repo:view,repo:deploy
يغطّي المنح كل تطبيق مبني من المستودع، بما في ذلك التطبيقات المُنشأة بعد المنح.
عرض المنح وسحبها
isogrid repos grants <repo> [--json]
isogrid repos revoke <repo> <grant-id|email|group>
isogrid repos grants acme/api
# ID SUBJECT WHO CAPABILITIES GRANTED
# 9c1e4a2b user contractor@partner.example view,create-app,deploy 3 days ago
# 51aa07fe group qa view,deploy 1 hour ago
isogrid repos revoke acme/api contractor@partner.example
isogrid repos revoke acme/api 51aa
يُشار إلى المنح ببداية الـ id الخاص به (أربعة أحرف أو أكثر)، أو بالبريد الإلكتروني أو المجموعة التي أُعطي لها. ولا يمكنك سحب منح إلا إن كان لا يعطي أكثر ممّا تملكه أنت.
الأعضاء والمجموعات: isogrid iam
الأعضاء
isogrid iam members [--search TEXT] [--role owner|administrator|developer]
[--status active|suspended] [--group SLUG] [--limit N] [--page N] [--json]
isogrid iam members --role administrator
isogrid iam members --group deployers
isogrid iam members --search @partner.example --status active
تُعرض النتائج على صفحات، 50 في كل صفحة افتراضيًا و200 على الأكثر. أمّا دعوة الأعضاء وتغيير أدوارهم فتتمّ من وحدة التحكّم.
المجموعات
isogrid iam groups list
isogrid iam groups get <group>
isogrid iam groups create --name NAME [--slug SLUG] [--description TEXT] [--permissions P,...] [--inherits GROUP,...]
isogrid iam groups update <group> [--name NAME] [--description TEXT] [--permissions P,...] [--inherits GROUP,...]
isogrid iam groups delete <group> [--yes]
isogrid iam groups add-member <group> <email>
isogrid iam groups remove-member <group> <email>
يستجيب groups أيضًا لـ group.
get يعرض صلاحيات المجموعة الخاصة، والصلاحيات التي ترثها، وأعضاءها. إنه
الأمر الذي تشغّله حين تريد معرفة ما سيمنحه الانضمام إلى مجموعة لشخص ما فعلًا.
create يقبل صلاحيات المؤسّسة وslugs المجموعات التي يُورَث منها. يملك أعضاء
المجموعة الجديدة صلاحياتها الخاصة وكل ما يملكه آباؤها، على نحو متعدٍّ.
update لا يغيّر إلا ما تعطيه، لكن --permissions و--inherits
يستبدلان القائمة كلّها. و--inherits "" يُفرغها.
لا يمكن تعديل المجموعات المدمجة ولا حذفها. لتعديل إحداها، أنشئ مجموعتك الخاصة التي ترث منها وتضيف ما تحتاج إليه.
delete يسأل أولًا، ويحتاج إلى --yes دون طرفية. يبقى الأعضاء في المؤسّسة
لكنهم يفقدون ما منحتهم إيّاه المجموعة، وتُزال معها المنح التي أُعطيت للمجموعة.
يحتاج تغيير المجموعات إلى صلاحية iam:manage، ويُفحص كل تغيير مقابل ما تملكه: لا
يمكنك إنشاء مجموعة بصلاحية تفتقر إليها، ولا جعل مجموعة ترث من أخرى تملك أكثر منك،
ولا إضافة أحد إلى مجموعة كهذه.
# Release managers: deploy anything, and read billing
isogrid iam groups create --name "Release managers" \
--inherits deployers --permissions billing:read
isogrid iam groups add-member release-managers lina@acme.example
isogrid iam groups get release-managers
ما يمكن منحه
isogrid iam permissions [--json]
يطبع كل صلاحية من صلاحيات المؤسّسة، مع تمييز التي لا يملكها إلا المالك؛ ثم، لكل
نوع من الموارد، قدراته والإعدادات المسبقة التي تجمعها. إنه المرجع للقيم التي
تقبلها --permissions و--capabilities و--org-capabilities، ويطابق دائمًا
المنصّة التي سجّلت الدخول إليها.
أتمتة الوصول
كل أمر سرد يقبل --json، الذي يطبع ردّ واجهة API على المخرج القياسي. أمّا الرسائل
فتذهب إلى مخرج الأخطاء القياسي.
مراجعة دورية لمن يستطيع البناء من أي مستودع:
for repo in $(isogrid repos list --json | jq -r '.[].full_name'); do
echo "== $repo"
isogrid repos grants "$repo"
done
ضمّ فريق من ملف عناوين بريد إلكتروني:
while read -r email; do
isogrid iam groups add-member deployers "$email"
done < new-team.txt
بيانات الاعتماد المفوَّضة وأوامر الوصول
لا تحمل بيانات اعتماد الـ CLI iam:manage وmember:manage إلا إن أبقيتهما
محدّدتين حين وافقت عليها؛ وهما غير محدّدتين افتراضيًا. ودون iam:manage، تُرفض
أوامر iam groups التي تغيّر شيئًا بينما تظلّ أوامر السرد تعمل.
لا يعتمد المنح والسحب على مستودع على iam:manage: بل على امتلاك repo:share على
ذلك المستودع، وهي قدرة يملكها مالكه دائمًا.
حالات حدّية يحسن معرفتها قبل أن تصادفها
"is not a repository you have been given access to". ألّا تملك شيئًا على مستودع يبدو تمامًا كعدم وجوده، فلا يمكن اكتشاف مستودع خاص بتخمين اسمه. اطلب الوصول من مالكه.
"You cannot grant capabilities you do not hold yourself". حاولت أن تعطي أكثر ممّا تملك. تسرد رسالة الخطأ ما ينقصك.
"These permissions belong to the owner alone". تعيين المسؤولين وتعديل البيانات القانونية للمؤسّسة لا يمكن وضعهما في مجموعة، من قِبل أي أحد.
"A group cannot inherit from itself, even indirectly". الوراثة التي طلبتها ستُغلق حلقة.
يُرفض repos access على مستودع تتولّى إدارته. يصل المسؤولون إلى المستودعات
المفتوحة لهم، لكن قرار من يدخل أيضًا يبقى للشخص الذي ربط الحساب ما دام عضوًا.