Udostępnij za pośrednictwem


Dziedziczenie ról w konstruktorze interfejsu API danych

Uwaga / Notatka

Funkcja narzędzia Data API Builder 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.

Dziedziczenie ról pozwala na zdefiniowanie uprawnień na poziomie szerszej roli, a bardziej szczegółowe role automatycznie dziedziczą te uprawnienia. Bez dziedziczenia ról należy powtórzyć ten sam blok uprawnień dla każdej roli w każdej jednostce. W przypadku dziedziczenia ról, zdefiniuj dostęp na anonymous raz, a każda szersza rola otrzyma ten sam dostęp.

Łańcuch dziedziczenia

Łańcuch dziedziczenia przepływa z najniższych uprawnień do najbardziej uprzywilejowanych:

named-role → authenticated → anonymous
roli Dziedziczy po Notatki
Nazwana rola (na przykład editor) authenticated Lub w anonymous przypadku, gdy authenticated nie skonfigurowano
authenticated anonymous Ma zastosowanie, gdy nie istnieje jawny authenticated blok
anonymous (brak) Podstawa łańcucha; brak zapasowego

Łańcuch oznacza:

  • Jeśli nazwana rola nie ma bloku uprawnień, DAB szuka authenticated bloku. Jeśli żadna nie istnieje, wraca do anonymous.
  • Jeśli authenticated nie ma bloku uprawnień, DAB używa bloku anonymous.
  • Jeśli anonymous nie ma bloku uprawnień, żądanie zostanie odrzucone 403 Forbidden.

Jak rozwiązuje się dziedziczenie

Gdy DAB ocenia żądanie, określa efektywną rolę, a następnie przechodzi przez łańcuch dziedziczenia, aby znaleźć blok uprawnień.

  1. DaB identyfikuje obowiązującą rolę z żądania (za pośrednictwem X-MS-API-ROLE nagłówka, oświadczeń tokenu lub wartości domyślnych).
  2. Język DAB szuka jawnego bloku uprawnień w entities.<name>.permissions , który pasuje do obowiązującej roli.
  3. Jeśli nie istnieje pasujący blok, DAB przechodzi w górę łańcucha: authenticatedanonymous.
  4. Pierwszy znaleziony pasujący blok definiuje uprawnienia dla żądania.
  5. Jeśli żaden blok nie pasuje do żadnej roli w łańcuchu, funkcja DAB zwraca wartość 403 Forbidden.

Uwaga / Notatka

DAB ocenia uprawnienia w kontekście dokładnie jednej efektywnej roli na każde żądanie. Dziedziczenie roli nie łączy uprawnień z wielu ról.

Examples

Minimalna konfiguracja: pojedyncze uprawnienie dla wszystkich ról

Zdefiniuj read uprawnienie na anonymous. Każda rola — authenticated i dowolna nazwana rola — dziedziczy ten dostęp.

{
  "entities": {
    "Book": {
      "source": "dbo.books",
      "permissions": [
        { "role": "anonymous", "actions": [ "read" ] }
      ]
    }
  }
}

Obowiązujące uprawnienia dla tej konfiguracji:

Entity: Book
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read (inherited from: anonymous)
    Unconfigured roles     | Inherit from: anonymous

Konfiguracja warstwowa: inny dostęp na rolę

Jeśli potrzebujesz różnych poziomów dostępu na rolę, zdefiniuj je jawnie. Dziedziczenie wypełnia tylko role, które nie są konfigurowane.

{
  "entities": {
    "Order": {
      "source": "dbo.orders",
      "permissions": [
        { "role": "anonymous",      "actions": [ "read" ] },
        { "role": "authenticated",  "actions": [ "read", "create" ] },
        { "role": "admin",          "actions": [ "*" ] }
      ]
    }
  }
}

Obowiązujące uprawnienia dla tej konfiguracji:

Entity: Order
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read, Create
    Role: admin            | Actions: Create, Read, Update, Delete
    Unconfigured roles     | Inherit from: authenticated

Dowolna nazwana rola inna niż admin—na przykład viewer lub support—dziedziczy z authenticated i uzyskuje dostęp do read i create.

Brak dziedziczenia: w pełni zablokowane

Jeśli anonymous nie ma bloku uprawnień i nie ma żadnej innej roli w łańcuchu, każde żądanie do tej jednostki zostanie odrzucone.

{
  "entities": {
    "AuditLog": {
      "source": "dbo.audit_log",
      "permissions": [
        { "role": "admin", "actions": [ "read" ] }
      ]
    }
  }
}

W tej konfiguracji tylko admin może uzyskać dostęp do AuditLog. authenticated i anonymous nie mają żadnej blokady do dziedziczenia, więc DAB odrzuca żądania z tych ról przy 403 Forbidden.

Ważna

DAB emituje ostrzeżenie podczas uruchamiania, gdy skonfigurowano authenticated lub nazwane role na jednostce, ale dostawca Unauthenticated jest aktywny. Gdy Unauthenticated funkcja jest aktywna, te role nigdy nie są aktywowane. Aby uzyskać więcej informacji, zobacz Konfigurowanie nieuwierzytelnionego dostawcy.

Wyświetlanie obowiązujących uprawnień

Użyj dab configure --show-effective-permissions do wyświetlania ustalonych uprawnień dla każdej jednostki, w tym które role są dziedziczone z których. To polecenie jest najszybszym sposobem zweryfikowania, czy dziedziczenie działa zgodnie z oczekiwaniami bez uruchamiania silnika.

dab configure --show-effective-permissions

Można również określić określony plik konfiguracji:

dab configure --show-effective-permissions --config my-config.json

Przykładowy wynik:

Entity: Book
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read (inherited from: anonymous)
    Unconfigured roles inherit from: anonymous

Entity: Order
    Role: admin            | Actions: Create, Read, Update, Delete
    Role: anonymous        | Actions: Read
    Role: authenticated    | Actions: Read (inherited from: anonymous)
    Unconfigured roles inherit from: authenticated

Aby uzyskać pełne opcje, zobacz --show-effective-permissions.

Dziedziczenie a jawne uprawnienia

Scenario Zalecenie
Wszystkie role powinny mieć taki sam dostęp Zdefiniuj raz na anonymous; niech wszystkie role dziedziczą
Uwierzytelnieni użytkownicy potrzebują większego dostępu niż anonimowy Zdefiniuj anonymous odczyt, dodaj authenticated utwórz/zaktualizuj
Zdefiniowana rola wymaga szerszego dostępu niż authenticated Zdefiniuj jawnie nazwaną rolę; inne dziedziczą z authenticated
Rola o nazwie wymaga mniejszego dostępu niż authenticated Jawne definiowanie nazwanej roli za pomocą ograniczonych akcji
Jednostka musi być w pełni prywatna Przyznaj tylko określoną nazwaną rolę; pozostaw authenticated i anonymous niezdefiniowane