Dědičnost rolí v Tvůrci rozhraní Data API

Poznámka:

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Dědičnost rolí vám umožňuje jednou definovat oprávnění pro širší roli a automaticky zajistit, že konkrétnější role tento přístup zdědí. Bez dědičnosti rolí je nutné opakovat stejný blok oprávnění pro každou roli v každé entitě. Pomocí dědičnosti rolí nastavte přístup na anonymous jednou a každá širší role získá stejný přístup.

Řetězec dědičnosti

Řetěz dědičnosti prochází z nejméně privilegovaného na nejvíce privilegovaný:

named-role → authenticated → anonymous
Úloha Dědí z Poznámky
Pojmenovaná role (například editor) authenticated Nebo z anonymous, pokud authenticated není nakonfigurovaný
authenticated anonymous Platí, pokud neexistuje žádný explicitní authenticated blok.
anonymous (žádný) Základ řetězce; bez záložní možnosti

Řetězec znamená:

  • Pokud pojmenovaná role nemá žádný blok oprávnění, DAB hledá authenticated blok. Pokud žádný neexistuje, vrátí se zpět na anonymous.
  • Pokud authenticated nemá žádný blok oprávnění, DAB použije blok anonymous.
  • Pokud anonymous nemá žádný blok oprávnění, žádost se zamítne s 403 Forbidden.

Jak se řeší dědičnost

Když DAB vyhodnocuje požadavek, určí efektivní roli a pak prochází řetězem dědičnosti, aby našel blok oprávnění.

  1. DAB identifikuje efektivní roli z požadavku (prostřednictvím X-MS-API-ROLE hlaviček, deklarací identity tokenů nebo výchozích hodnot).
  2. DAB hledá explicitní blok oprávnění v entities.<name>.permissions, který odpovídá efektivní roli.
  3. Pokud neexistuje žádný odpovídající blok, DAB prochází nahoru po řetězu: authenticatedanonymous.
  4. První nalezený odpovídající blok poskytuje oprávnění pro požadavek.
  5. Pokud žádný blok neodpovídá žádné roli v řetězci, DAB vrátí 403 Forbidden.

Poznámka:

DAB vyhodnocuje oprávnění v kontextu přesně jedné efektivní role na požadavek. Dědičnost rolí nezkombinuje oprávnění z více rolí.

Příklady

Minimální konfigurace: jedno oprávnění pro všechny role

Definujte oprávnění pro read na anonymous. Každá role – authenticated i jakákoli pojmenovaná role dědí tento přístup.

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

Platná oprávnění pro tuto konfiguraci:

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

Vrstvená konfigurace: jiný přístup pro každou roli

Pokud potřebujete různé úrovně přístupu pro každou roli, definujte je explicitně. Dědičnost vyplní pouze role, které nepřizpůsobíte.

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

Platná oprávnění pro tuto konfiguraci:

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

Libovolná pojmenovaná role jiná než admin—například viewer nebo support—dědí z authenticated a získá přístup k read a create.

Bez dědičnosti: plně zablokováno

Pokud anonymous nemá žádný blok oprávnění a žádná jiná role v řetězu žádnou nemá, každý požadavek na tuto entitu se odmítne.

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

V této konfiguraci má přístup pouze admin na AuditLog. authenticated a anonymous nemají k dědění žádný blok, takže DAB odmítne žádosti z těchto rolí pomocí 403 Forbidden.

Důležité

DAB při spuštění vygeneruje upozornění, když jsou na entitě nakonfigurovány pojmenované role authenticated, ale poskytovatel Unauthenticated je aktivní. Pokud Unauthenticated je aktivní, tyto role se nikdy neaktivují. Další informace najdete v tématu Konfigurace neověřeného zprostředkovatele.

Zobrazení efektivních oprávnění

Použijte dab configure --show-effective-permissions k zobrazení vyřešených oprávnění pro každou entitu, včetně toho, které role byly zděděny od kterých. Tento příkaz představuje nejrychlejší způsob, jak ověřit, že dědičnost funguje podle očekávání bez spuštění engine.

dab configure --show-effective-permissions

Můžete také cílit na konkrétní konfigurační soubor:

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

Příklad výstupu:

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

Pro úplný výběr podívejte se na --show-effective-permissions.

Dědičnost vs. explicitní oprávnění

Scénář Recommendation
Všechny role by měly mít stejný přístup. Definujte jednou na anonymous; umožněte, aby všechny role dědily
Ověření uživatelé potřebují více přístupu než anonymní. Definovat anonymous číst, přidat authenticated vytvořit/aktualizovat
Pojmenovaná role potřebuje širší přístup než authenticated Definujte pojmenovanou roli explicitně; ostatní dědí z authenticated
Pojmenovaná role potřebuje méně přístupu než authenticated Definování pojmenované role explicitně pomocí omezených akcí
Entita musí být plně soukromá. Udělte pouze konkrétní pojmenovanou roli; nechte authenticated a anonymous nedefinované