Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
A funcionalidade do construtor de API de Dados descrita nesta seção está disponível na versão 2.0 e posterior. Para obter mais informações, consulte o que há de novo na versão 2.0.
A herança de função permite definir permissões uma vez em uma função mais ampla e ter funções mais específicas herdando automaticamente esse acesso. Sem a herança de funções, você deve repetir o mesmo bloco de permissão para cada função em cada entidade. Com a herança de funções, defina o acesso em anonymous uma vez e todas as funções mais abrangentes receberão o mesmo acesso.
A cadeia de herança
A cadeia de herança flui de menos privilegiados para os mais privilegiados:
named-role → authenticated → anonymous
| Função | Herda de | Observações |
|---|---|---|
Função nomeada (por exemplo, editor) |
authenticated |
Ou de anonymous se authenticated não estiver configurado |
authenticated |
anonymous |
Aplica-se quando nenhum bloco explícito authenticated existe |
anonymous |
(nenhum) | Base da cadeia; nenhuma alternativa |
A cadeia significa:
- Se uma função nomeada não tiver nenhum bloco de permissão, o DAB procurará um bloco
authenticated. Se nenhum existir, ele retorna paraanonymous. - Se
authenticatednão tiver nenhum bloco de permissão, o DAB usará oanonymousbloco. - Se
anonymousnão tiver nenhum bloco de permissão, a solicitação será rejeitada com403 Forbidden.
Como a herança é resolvida
Quando o DAB avalia uma solicitação, ele determina a função efetiva e, em seguida, percorre a cadeia de herança para encontrar um bloco de permissão:
- O DAB identifica a função efetiva da solicitação (por meio de cabeçalho, declarações de token ou padrões de
X-MS-API-ROLE). - O DAB procura em
entities.<name>.permissionsum bloco de permissão explícito que corresponda à função efetiva. - Se nenhum bloco correspondente existir, o DAB percorrerá a cadeia:
authenticated→anonymous. - O primeiro bloco correspondente encontrado fornece as permissões para a solicitação.
- Se nenhum bloco corresponder a nenhuma função na cadeia, o DAB retornará
403 Forbidden.
Observação
O DAB avalia as permissões no contexto de exatamente uma função efetiva por solicitação. A herança de funções não combina permissões de várias funções.
Exemplos
Configuração mínima: permissão única para todas as funções
Defina uma permissão read em anonymous. Cada função,authenticated e qualquer função nomeada, herda esse acesso.
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Permissões efetivas para esta configuração:
Entity: Book
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles | Inherit from: anonymous
Configuração em camadas: acesso diferente por função
Quando você precisar de níveis de acesso diferentes por função, defina cada um explicitamente. A herança preenche apenas as funções que você não configura.
{
"entities": {
"Order": {
"source": "dbo.orders",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] },
{ "role": "authenticated", "actions": [ "read", "create" ] },
{ "role": "admin", "actions": [ "*" ] }
]
}
}
}
Permissões efetivas para esta configuração:
Entity: Order
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read, Create
Role: admin | Actions: Create, Read, Update, Delete
Unconfigured roles | Inherit from: authenticated
Qualquer função nomeada diferente do admin — por exemplo, viewer ou support — herda de authenticated e obtém read e create acesso.
Sem herança: totalmente bloqueada
Se anonymous não tiver nenhum bloco de permissão e nenhuma outra função na cadeia tiver uma, cada solicitação para essa entidade será rejeitada.
{
"entities": {
"AuditLog": {
"source": "dbo.audit_log",
"permissions": [
{ "role": "admin", "actions": [ "read" ] }
]
}
}
}
Nessa configuração, apenas admin pode acessar AuditLog.
authenticated e anonymous não têm nenhum bloco para herdar, portanto, o DAB rejeita solicitações dessas funções com 403 Forbidden.
Importante
O DAB emite um aviso na inicialização quando funções nomeadas ou authenticated são configuradas em uma entidade, mas o provedor Unauthenticated está ativo. Quando Unauthenticated estiver ativo, essas funções nunca serão ativadas. Para obter mais informações, consulte Configurar o provedor não autenticado.
Exibir permissões efetivas
Use dab configure --show-effective-permissions para exibir as permissões resolvidas para cada entidade, incluindo quais funções herdaram de quais. Esse comando é a maneira mais rápida de verificar se a herança está funcionando conforme o esperado sem executar o mecanismo.
dab configure --show-effective-permissions
Você também pode direcionar um arquivo de configuração específico:
dab configure --show-effective-permissions --config my-config.json
Exemplo de saída:
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
Para obter opções completas, consulte --show-effective-permissions.
Herança versus permissões explícitas
| Scenario | Recomendação |
|---|---|
| Todas as funções devem ter o mesmo acesso | Definir uma vez em anonymous, permitir que todas as funções herdem |
| Usuários autenticados precisam de mais acesso do que anônimos | Definir leitura anonymous, adicionar criação/atualização authenticated |
Uma função nomeada precisa de acesso mais amplo do que authenticated |
Definir a função nomeada explicitamente; outras herdam de authenticated |
Uma função nomeada precisa de menos acesso do que authenticated |
Definir a função nomeada explicitamente com as ações reduzidas |
| Uma entidade deve ser totalmente privada | Conceda apenas a função nomeada específica; deixe authenticated e anonymous indefinidos. |