Sistema multinível de verificação de acesso com interfaces
Go
Hard
interfaces
Tarefa «Sistema multinível de verificação de acesso com interfaces»
Implemente um sistema de verificação de acesso a recursos utilizando interfaces. Defina a interface AccessChecker com os métodos CheckAccess(resource string, user string) bool e GetPermissions(resource string) []string. Implemente três estruturas: AdminAccess (sempre retorna true e uma lista de todas as permissões contendo 'admin'), UserAccess (verifica a presença do usuário na lista de autorizados para o recurso e retorna permissões que começam com 'user_'), GuestAccess (verifica se o recurso está na lista de públicos e retorna a permissão 'read' se estiver disponível). Em seguida, implemente a função CreateAccessChecker(accessType string, config map[string]interface{}) (AccessChecker, error), que, a partir da string accessType ('admin', 'user', 'guest') e da configuração, cria o objeto correspondente. Entrada: primeiro um número inteiro N (1..100) — quantidade de requisições. Depois, N linhas no formato: accessType resource user. Após isso, uma linha com a configuração: para admin — string vazia; para user — string no formato 'resource1:user1,user2;resource2:user3'; para guest — string no formato 'resource1;resource2'. Para cada requisição, exiba 'allowed' ou 'denied'. Se o accessType for desconhecido, exiba 'unknown type'.
Formato de Entrada
N (número inteiro)
N linhas: accessType resource user
linha de configuração
Formato de Saída
N linhas: 'allowed' ou 'denied' ou 'unknown type'
Exemplos
Exemplo 1
ENTRADA
3
admin secret admin
user docs alice
guest public bob
SAÍDA
allowed
denied
denied
Exemplo 2
ENTRADA
2
admin vault eve
user reports john
resource1:alice,bob;resource2:charlie
SAÍDA
allowed
denied
Exemplo 3
ENTRADA
1 2 3 4 5
6 7 8 9 10
SAÍDA
unknown type
Exemplo 4
ENTRADA
1
superuser root root
SAÍDA
unknown type
Exemplo 5
ENTRADA
-1 2 3 -4 5
6 -7 8 -9 10
SAÍDA
unknown type
main.go