O TNF introduz uma infra-estrutura para Autorização e Autenticação para suas aplicações web.
Os endpoints de uma aplicação podem necessitar de uma níveis de permissões para serem acessados.
A estrutura para utilização de autorização de autenticação está contida no pacote Tnf.App.AspNet.Security disponível via nuget em nosso package souce: https://www.myget.org/F/tnf/api/v3/index.json
Para que a sua aplicação consiga conversar com o serviço de RAC precisa parametrizar no arquivo de configuração o endereço onde o serviço do RAC se encontra:
{ "RACUrl": "http://127.0.0.1:10315/", "ConnectionStrings": { "Default": "Server=(localdb)\\MSSQLLocalDB;Database=Tnf;Trusted_Connection=True;MultipleActiveResultSets=true" } }
Dessa forma quando o modulo for carregado ao startup da aplicação suas dependências serão carregadas com ele, e ao carregar esse módulo ele vai fazer uma pesquisa por todos os controllers da aplicação que herdem de TnfAppController e procurar neles métodos que possuem o atributo TnfAuthorize para popular o serviço de RAC com as permissões expostas nos métodos.
Dependências de módulo
Para ter o nosso projeto de segurança no projeto web é necessário criar um módulo que dependa do módulo TnfAppAspNetCoreSecurityModule:
[DependsOn(typeof(TnfAppAspNetCoreSecurityModule))] public class WebModule : TnfAppModule { public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } }
Dessa forma quando o modulo for carregado ao startup da aplicação suas dependências serão carregadas com ele, e ao carregar esse módulo ele vai fazer uma pesquisa por todos os controllers da aplicação que herdem de TnfAppController e procurar neles métodos que possuem o atributo TnfAuthorize para popular o serviço de RAC com as permissões expostas nos métodos.
Para vincular um endpoint a uma permissão, é necessário decorar ele com o atributo de segurança disponibilizado pelo Tnf.App.AspnetCore.Security:
public class BlogController : TnfAppController { [HttpGet] [TnfAuthorize(Permissions.CanGet)] public IActionResult Get() => CreateResponseOnGet(new ResponseDto()); }