إدارة الأدوار

تتيح لك Directory API استخدام التحكّم في الوصول استنادًا إلى الدور (RBAC) لإدارة إمكانية الوصول إلى الميزات في نطاق Google Workspace. يمكنك إنشاء أدوار مخصّصة تتضمّن امتيازات للحدّ من وصول المشرف بشكل أكثر تحديدًا من الأدوار المُحدَّدة مسبقًا التي يتم توفيرها مع Google Workspace. يمكنك إسناد أدوار إلى المستخدمين أو مجموعات الأمان. يوضّح هذا الدليل كيفية تنفيذ بعض المهام الأساسية المرتبطة بالأدوار.

في ما يلي قائمة بالمصطلحات الشائعة التي تستخدمها Directory API في ما يتعلق بالتحكّم المستند إلى الأدوار (RBAC) في Google Workspace:

الامتياز
الإذن اللازم لتنفيذ مهمة أو عملية في نطاق Google Workspace يتم تمثيلها من خلال مورد Privilege. لا تتوفّر بيانات دائمة مرتبطة بهذا المرجع.
Role
مجموعة من الامتيازات التي تمنح الكيانات التي لديها هذا الدور القدرة على تنفيذ مهام أو عمليات معيّنة. يتم تمثيلها من خلال مورد Role.
إسناد الدور
سجلّ دور معيّن تم منحه للمستخدم أو المجموعة. يتم تمثيله من خلال المورد RoleAssignment.
مجموعة الأمان
أحد أنواع مجموعات Cloud Identity المستخدَمة للتحكّم في الوصول إلى موارد المؤسسة. يمكن أن تحتوي مجموعات الأمان على مستخدمين فرديين ومجموعات.

حدود الأدوار وإسناد الأدوار

يمكنك إنشاء عدد محدود فقط من الأدوار المخصّصة أو عمليات إسناد الأدوار، لذا إذا كنت على وشك بلوغ الحدّ الأقصى، عليك دمجها أو إزالتها لتجنُّب تجاوز الحدّ الأقصى. تنطبق الحدود التالية على الأدوار وتعيينات الأدوار:

  • يمكنك إنشاء ما يصل إلى 750 دورًا مخصصًا لمؤسستك بأكملها.
  • يمكنك إنشاء ما يصل إلى 1000 عملية إسناد أدوار لكل وحدة تنظيمية، مع العلم أنّ المؤسسة الجذرية تُعتبر وحدة. على سبيل المثال، يمكنك إسناد 600 دور في المؤسسة الرئيسية و700 دور ضمن وحدة تنظيمية أخرى حدّدتها، مثل قسم في شركة. تكون جميع أدوار المشرفين السابقة التحديد في Google Workspace مضبوطة تلقائيًا على نطاق المؤسسة. مزيد من المعلومات حول القيود المفروضة على الامتيازات التي يمكن منحها على مستوى الوحدة التنظيمية

تنطبق الحدود التالية على الأدوار وإسناد الأدوار للمجموعات:

  • يمكنك إسناد أي دور باستثناء دور المشرف المتميّز.
  • يمكنك إجراء ما يصل إلى 250 عملية إسناد الأدوار إلى المجموعات إجمالاً على مستوى الوحدة التنظيمية ككل وداخل كل وحدة تنظيمية.
  • يجب أن تكون المجموعة مجموعة أمان في مؤسستك.
  • ننصح بقصر عضوية المجموعة على المستخدمين في مؤسستك. يمكنك إضافة مستخدمين من خارج مؤسستك، ولكن قد لا يحصلون على امتيازات الدور. لمعرفة التفاصيل، يُرجى الاطّلاع على تقييد عضوية المجموعة. ### إسناد الأدوار إلى المجموعات

إذا كنت بحاجة إلى إسناد أكثر من 1000 دور في وحدة تنظيمية، يمكنك إضافة عدة أعضاء إلى مجموعة أمان وتحديد دور لها. تخضع عمليات تعيين أدوار المجموعة لبعض القيود الإضافية، لذا يُرجى الاطّلاع على مركز مساعدة المشرف للحصول على معلومات محدّدة.

ربط الأدوار بالامتيازات في "وحدة تحكّم المشرف في Google"

لتخصيص أدوار للمستخدمين الذين يصلون إلى امتيازاتهم من خلال "وحدة تحكّم المشرف"، قد تحتاج إلى منح امتيازات إضافية معيّنة. على سبيل المثال، لمنح مستخدم إذنًا بإنشاء مستخدمين آخرين من خلال "وحدة تحكّم المشرف"، يجب منحه الإذن المميّز USERS_CREATE بالإضافة إلى الإذنَين المميّزَين USERS_UPDATE وORGANIZATION_UNITS_RETRIEVE. يوضّح الجدول التالي وظائف "وحدة تحكّم المشرف" والأذونات المطلوبة لإدارة المستخدمين والوحدات التنظيمية.

وظائف "وحدة تحكّم المشرف" الامتيازات المطلوبة
الوحدات التنظيمية - قراءة ORGANIZATION_UNITS_RETRIEVE
الوحدات التنظيمية - إنشاء ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_CREATE
تعديل الوحدات التنظيمية ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_UPDATE
الوحدات التنظيمية - حذف ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_DELETE
الوحدات التنظيمية ORGANIZATION_UNITS_ALL
المستخدمون - قراءة USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - إنشاء USERS_CREATE + USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - تعديل USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - نقل المستخدمين USERS_MOVE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - إعادة تسمية المستخدمين USERS_ALIAS + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - إعادة ضبط كلمة المرور USERS_RESET_PASSWORD + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - فرض تغيير كلمة المرور USERS_FORCE_PASSWORD_CHANGE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - إضافة/إزالة أسماء مستعارة USERS_ADD_NICKNAME + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المستخدمون - تعليق حسابات المستخدمين USERS_SUSPEND + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE
المجموعات GROUPS_ALL
الأمان - إدارة أمان المستخدم USER_SECURITY_ALL + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE

أمثلة على حالات الاستخدام

قبل البدء

قبل تشغيل الأمثلة الواردة في هذا الدليل، عليك إعداد المصادقة والتفويض.

  1. ضبط شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth

  2. إنشاء بيانات اعتماد الوصول

الحصول على قائمة بامتيازات النطاق

للحصول على قائمة مقسّمة إلى صفحات بالأذونات المتوافقة في نطاقك، استخدِم طريقة privileges.list().

  • إذا كنت مشرفًا بصدد الحصول على امتيازات في نطاقك الخاص، استخدِم my_customer كمعرّف العميل.

  • إذا كنت مورِّدًا تحصل على امتيازات لأحد عملائك، استخدِم رقم تعريف العميل الذي تعرضه عملية استرداد مستخدم.

طلب

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles/ALL/privileges

الردّ

تعرض الاستجابة الناجحة رمز الحالة HTTP 200. وإلى جانب رمز الحالة، تعرض الاستجابة الامتيازات المتاحة في النطاق:

{
  "kind": "admin\#directory\#privileges",
  "etag": ...,
  "items": [
    {
      "kind": "admin\#directory\#privilege",
      "etag": ...,
      "serviceId": "02afmg282jiquyg",
      "privilegeName": "APP_ADMIN",
      "isOuScopable": false
    },
    {
      "kind": "admin\#directory\#privilege",
      "etag": ...,
      "serviceId": "04f1mdlm0ki64aw",
      "privilegeName": "MANAGE_USER_SETTINGS",
      "isOuScopable": true,
      "childPrivileges": [
        {
          "kind": "admin\#directory\#privilege",
          "etag": ...,
          "serviceId": "04f1mdlm0ki64aw",
          "privilegeName": "MANAGE_APPLICATION_SETTINGS",
          "isOuScopable": true
        }
      ]
    },
    ...
  ]
}

الحصول على الأدوار الحالية

للحصول على قائمة بالأدوار الحالية، استخدِم طلب GET التالي وأضِف التفويض الموضّح في طلبات التفويض.

  • إذا كنت مشرفًا وتتلقّى أدوارًا في نطاقك الخاص، استخدِم my_customer كمعرّف العميل.

  • إذا كنت مورّدًا وتحصل على أدوار لأحد العملاء، استخدِم رقم تعريف العميل الذي حصلت عليه باستخدام عملية استرداد مستخدم.

طلب

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles

الردّ

تعرض الاستجابة الناجحة رمز الحالة 200 في HTTP. بالإضافة إلى رمز الحالة، تعرض الاستجابة الأدوار المتوفّرة في النطاق:

{
  "kind": "admin\#directory\#roles",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/DywA6_jaJCYw-f0lFs2-g17UWe8\"",
  "items": [
    {
      "kind": "admin\#directory\#role",
      "etag": ... ,
      "roleId": "3894208461012993",
      "roleName": "_SEED_ADMIN_ROLE",
      "roleDescription": "Google Workspace Administrator Seed Role",
      "rolePrivileges": [
        {
          "privilegeName": "SUPER_ADMIN",
          "serviceId": "01ci93xb3tmzyin"
        },
        {
          "privilegeName": "ROOT_APP_ADMIN",
          "serviceId": "00haapch16h1ysv"
        },
        {
          "privilegeName": "ADMIN_APIS_ALL",
          "serviceId": "00haapch16h1ysv"
        },
        ...
      ],
      "isSystemRole": true,
      "isSuperAdminRole": true
    },
    {
      "kind": "admin\#directory\#role",
      "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/bTXiZXfuK1NGr_f4paosCWXuHmw\"",
      "roleId": "3894208461012994",
      "roleName": "_GROUPS_ADMIN_ROLE",
      "roleDescription": "Groups Administrator",
      "rolePrivileges": [
        {
          "privilegeName": "CHANGE_USER_GROUP_MEMBERSHIP",
          "serviceId": "01ci93xb3tmzyin"
        },
        {
          "privilegeName": "USERS_RETRIEVE",
          "serviceId": "00haapch16h1ysv"
        },
        {
          "privilegeName": "GROUPS_ALL",
          "serviceId": "00haapch16h1ysv"
        },
        {
          "privilegeName": "ADMIN_DASHBOARD",
          "serviceId": "01ci93xb3tmzyin"
        },
        {
          "privilegeName": "ORGANIZATION_UNITS_RETRIEVE",
          "serviceId": "00haapch16h1ysv"
        }
      ],
      "isSystemRole": true
    },
    ...
  ]
}

إدراج جميع عمليات تعيين الأدوار

للحصول على قائمة مقسّمة إلى صفحات بجميع عمليات إسناد الأدوار المباشرة، استخدِم طريقة roleAssignments.list(). قد تعرض واجهة برمجة التطبيقات نتائج فارغة مع رمز مميّز للصفحة عند ضبط المَعلمة userKey. يجب مواصلة تقسيم النتائج إلى صفحات إلى أن لا يتم عرض رمز مميز للصفحة.

  • إذا كنت مشرفًا وتتلقّى مهام أدوار في نطاقك الخاص، استخدِم my_customer كمعرّف العميل.

  • إذا كنت مورِّدًا بائعًا بالتجزئة وتحصل على مهام أدوار لأحد عملائك، استخدِم رقم تعريف العميل الذي تعرضه عملية استرداد مستخدم.

طلب

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments

الردّ

تعرض الاستجابة الناجحة رمز الحالة 200 في HTTP. بالإضافة إلى رمز الحالة، تعرض الاستجابة جميع الأدوار المعيّنة في النطاق:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId:"3894208461013211",
  "assignedTo:"100662996240850794412",
  "assigneeType:"user",
  "scopeType:"CUSTOMER",
}

عرض جميع عمليات إسناد الأدوار غير المباشرة

للحصول على قائمة مقسّمة إلى صفحات تتضمّن جميع عمليات إسناد الأدوار، بما في ذلك الأدوار التي تم إسنادها بشكل غير مباشر إلى مستخدم بسبب المجموعات التي ينتمي إليها، استخدِم طريقة roleAssignments.list().

قد تعرض واجهة برمجة التطبيقات نتائج فارغة مع رمز مميّز للصفحة. يجب مواصلة تقسيم النتائج إلى صفحات إلى أن لا يتم عرض رمز مميز للصفحة.

  • إذا كنت مشرفًا وتتلقّى مهام أدوار في نطاقك الخاص، استخدِم my_customer كمعرّف العميل.

  • إذا كنت مورِّدًا بائعًا بالتجزئة وتحصل على مهام أدوار لأحد عملائك، استخدِم رقم تعريف العميل الذي تعرضه عملية استرداد مستخدم.

  • استبدِل USER_KEY بقيمة تحدّد المستخدم في طلب واجهة برمجة التطبيقات. لمزيد من المعلومات، يُرجى الاطّلاع على users.get.

طلب

GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments?userKey=USER_KEY&includeIndirectRoleAssignments=true

الردّ

تعرض الاستجابة الناجحة رمز الحالة 200 في HTTP. بالإضافة إلى رمز الحالة، تعرض الاستجابة جميع الأدوار المحدّدة في النطاق وما إذا كان assigneeType هو user أو group:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId:"3894208461013211",
  "assignedTo:"100662996240850794412",
  "assigneeType:"group",
  "scopeType:"CUSTOMER",
}

إنشاء دور

لإنشاء دور جديد، استخدِم طلب POST التالي وأضِف التفويض الموضّح في طلبات التفويض. أضِف السمتَين privilegeName وserviceId لكل امتياز يجب منحه مع هذا الدور. للاطّلاع على سمات الطلب والاستجابة، يُرجى مراجعة مرجع واجهة برمجة التطبيقات.

طلب

POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles

{
  "roleName": "My New Role",
  "rolePrivileges": [
    {
      "privilegeName": "USERS_ALL",
      "serviceId": "00haapch16h1ysv"
    },
    {
      "privilegeName": "GROUPS_ALL",
      "serviceId": "00haapch16h1ysv"
    }
  ]
}

الردّ

تعرض الاستجابة الناجحة رمز الحالة 200 في HTTP. بالإضافة إلى رمز الحالة، تعرض الاستجابة سمات الدور الجديد:

{
  "kind": "admin\#directory\#role",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/uX9tXw0qyijC9nUKgCs08wo8aEM\"",
  "roleId": "3894208461013031",
  "roleName": "My New Role",
  "rolePrivileges": [
    {
      "privilegeName": "GROUPS_ALL",
      "serviceId": "00haapch16h1ysv"
    },
    {
      "privilegeName": "USERS_ALL",
      "serviceId": "00haapch16h1ysv"
    }
  ]
}

إنشاء مهمة دور

لتعيين دور، استخدِم طريقة POST التالية وأضِف التفويض الموضّح في طلبات التفويض.

طلب

POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments

{
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER"
}

الردّ

تعرض الاستجابة الناجحة رمز الحالة 200 في HTTP. إلى جانب رمز الحالة، تعرض الاستجابة سمات تعيين الدور الجديد:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId": "3894208461013211",
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER"
}

إنشاء مهمة دور تتضمّن شروطًا

يمكنك منح أدوار لتنفيذ إجراءات تستوفي شروطًا معيّنة. في الوقت الحالي، يتوفّر شرطان فقط:

  • لا ينطبق إلا على مجموعات الأمان
  • لا ينطبق على مجموعات الأمان

عند ضبط condition، لن يتم تطبيقه إلا عندما يستوفي المورد الذي يتم الوصول إليه الشرط. إذا كان condition فارغًا، يتم تطبيق الدور (roleId) على الجهة الفاعلة (assignedTo) في النطاق (scopeType) بدون شروط.

لمنح دور لمستخدم، استخدِم طريقة POST التالية وأضِف التفويض الموضّح في طلبات التفويض.

أضِف نص JSON يتضمّن user_id الخاص بالمستخدم، والذي يمكنك الحصول عليه من users.get()، وroleId كما هو موضح في الحصول على الأدوار الحالية، وcondition. يجب استخدام سلسلتَي الشرط كما هو موضّح أدناه، ولا تعملان إلا مع أدوار المشرفين المحدّدة مسبقًا في "محرّر المجموعات" و"قارئ المجموعات". تتّبع هذه الشروط بنية شروط Cloud IAM.

طلب

لا ينطبق إلا على مجموعات الأمان
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments

{
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER",
  "condition": "api.getAttribute('cloudidentity.googleapis.com/groups.labels',
    []).hasAny(['groups.security']) && resource.type ==
    'cloudidentity.googleapis.com/Group'"
}
لا ينطبق على مجموعات الأمان
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments

{
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER",
  "condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels',
    []).hasAny(['groups.security']) && resource.type ==
    'cloudidentity.googleapis.com/Group'"
}

الردّ

تعرض الاستجابة الناجحة رمز الحالة 200 في HTTP. إلى جانب رمز الحالة، تعرض الاستجابة سمات تعيين الدور الجديد:

{
  "kind": "admin\#directory\#roleAssignment",
  "etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
  "roleAssignmentId": "3894208461013211",
  "roleId": "3894208461012995",
  "assignedTo": "100662996240850794412",
  "scopeType": "CUSTOMER",
  "condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels',
    []).hasAny(['groups.security']) && resource.type ==
    'cloudidentity.googleapis.com/Group'"
}