O Security4Delphi consiste em uma biblioteca que permite o uso do conceito de segurança em seus aplicativos Delphi.
A segurança é uma preocupação de grande importância para a maioria dos aplicativos e o foco de discussões intermináveis sobre as equipes de desenvolvimento. A implementação do contexto de segurança foi projetada de maneira simples e flexível, independentemente da camada de apresentação ou tecnologia, deixando você livre para implementar sua própria solução ou usar as extensões existentes.
O mecanismo de autenticação visa verificar a identidade do usuário de um sistema.
O mecanismo de autorização de IO já é responsável por garantir que apenas usuários autorizados tenham acesso a certos recursos de um sistema. A autorização pode acontecer de duas maneiras: funcionalidade de permissão e habilitar por função.
Para colocar uma cópia local em funcionamento, siga estas etapas simples.
Para usar esta biblioteca, é necessária uma versão atualizada do Delphi IDE (XE ou superior).
Clone o repo
git clone https://github.com/ezequieljuliano/Security4Delphi.git
Adicione o "caminho de pesquisa" do seu IDE ou do seu projeto os seguintes diretórios:
Security4Delphisrc
Para fornecer o paradigma de contexto de segurança em seu projeto com segurança4delphi, você precisa:
Para ilustrar o uso, vejamos uma solução para gerenciar logs de um aplicativo.
Crie sua implementação da interface do iAuthenticator:
TAuthenticator = class(TAbstractSecurityProvider, IAuthenticator)
private
fAuthenticated: Boolean;
fAuthenticatedUser: IUser;
protected
function GetAuthenticatedUser: IUser;
procedure Authenticate(user: IUser);
procedure Unauthenticate;
public
procedure AfterConstruction; override;
end;
Crie sua implementação da interface do Iauthorizer:
TAuthorizer = class(TAbstractSecurityProvider, IAuthorizer)
private
{ private declarations }
protected
function HasRole(role: string): Boolean;
function HasAnyRole(roles: array of string): Boolean;
function HasAuthority(authority: string): Boolean;
function HasAnyAuthority(authorities: array of string): Boolean;
public
{ public declarations }
end;
Registre suas implementações no contexto:
function SecurityContext: ISecurityContext;
begin
if (SecurityContextInstance = nil) then
begin
SecurityContextInstance := TSecurityContext.Create;
SecurityContextInstance.RegisterAuthenticator(TAuthenticator.Create(SecurityContextInstance));
SecurityContextInstance.RegisterAuthorizer(TAuthorizer.Create(SecurityContextInstance));
end;
Result := SecurityContextInstance;
end;
Use o contexto e valide a autenticação e a autorização:
function TPersonRepository.Delete(personId: Integer): Boolean;
begin
if not SecurityContext.HasAnyRole(['ROLE_ADMIN', 'ROLE_MANAGER']) then
raise EAuthorizationException.Create('You do not have role to access this feature.');
if not SecurityContext.HasAuthority('PERSON_DELETE') then
raise EAuthorizationException.Create('You do not have permission to access this feature.');
Result := True;
end;
Protegendo o sistema com aspectos [requerirrole], [requeriranyrol], [requerida a autoridade] e [necessária qualquer autoridade]:
O uso do Security4Delphi juntamente com o Aspect4Delphi é possível fazer uso do conceito de programação orientada a aspectos (AOP).
TPersonRepository = class
private
{ private declarations }
protected
{ protected declarations }
public
constructor Create;
destructor Destroy; override;
[RequiredRole('ROLE_ADMIN')]
[RequiredAuthority('PERSON_INSERT')]
function Insert(person: TPerson): TPerson; virtual;
[RequiredAnyRole('ROLE_ADMIN,ROLE_MANAGER')]
[RequiredAuthority('PERSON_UPDATE')]
function Update(person: TPerson): TPerson; virtual;
[RequiredAnyRole('ROLE_ADMIN,ROLE_MANAGER')]
[RequiredAuthority('PERSON_DELETE')]
function Delete(personId: Integer): Boolean; virtual;
[RequiredAnyRole('ROLE_ADMIN,ROLE_MANAGER,ROLE_GUEST')]
[RequiredAuthority('PERSON_VIEW')]
function FindById(personId: Integer): TPerson; virtual;
end;
Veja os problemas abertos para uma lista dos recursos propostos (e problemas conhecidos).
As contribuições são o que tornam a comunidade de código aberto um lugar tão incrível para aprender, inspirar e criar. Quaisquer contribuições que você faz são muito apreciadas .
git checkout -b feature/AmazingFeature )git commit -m 'Add some AmazingFeature' )git push origin feature/AmazingFeature ) Distribuído sob a licença Apache. Consulte LICENSE para obter mais informações.
Para entrar em contato conosco, use as opções:
https://github.com/ezequieljuliano/security4delphi