Ana içeriğe geç

2.1.1.2 BFF Security Modülü#

Eksen altyapısı ile geliştirilen angular tabanlı uygulamalara güvenlikle ilgili temel sınıf, direktif, guard, interceptor ve servisler sunan modüldür.

BFF Security modülünün önemli bir avantajı Keysys ürünü ile entegre çalışmasıdır. Keysys üzerindeki yetkilendirme tanımları bu modül ile sağlanan bileşenlerle kolay bir şekilde kullanılabilir.

BFF Security altındaki alt modüller şunlardır:


Directive#

HvlIfAllGrantedDirective#

Bu direktif (hvlIfAllGranted) kullanıcının parametre ile verilen yetkilerin tamamına sahip olması durumunda render edilmesini sağlar. Aşağıdaki örneği inceleyiniz:

<hvl-form-item *hvlIfAllGranted="['mailYetki', 'mailGrupYetki']" key="email" label="email">
  <input id="email" type="email" formControlName="email" pInputText />
</hvl-form-item>
Yukarıdaki örnekte email hvl-form-item'ı kullanıcı mailYetki ve mailGrupYetki yetkilerinin her ikisine birden sahipse ekranda görünecektir.

HvlIfAnyGrantedDirective#

Bu direktif (hvlIfAnyGranted) kullanıcının parametre ile verilen yetkilerin en az birine sahip olması durumunda render edilmesini sağlar. Aşağıdaki örneği inceleyiniz:

<hvl-form-item *hvlIfAnyGranted="['mailYetki', 'mailGrupYetki']" key="email" label="email">
  <input id="email" type="email" formControlName="email" pInputText />
</hvl-form-item>
Yukarıdaki örnekte email hvl-form-item'ı kullanıcı mailYetki ve mailGrupYetki yetkilerinin en az birine sahipse ekranda görünecektir.

HvlIfNotGrantedDirective#

Bu direktif (hvlIfNotGranted) kullanıcının parametre ile verilen yetkilerin hiçbirine sahip olmaması durumunda render edilmesini sağlar. Bu direktif HvlIfAnyGrantedDirective direktifinin tersidir. Genellikle kullanıcıya yetkisi olmadığı durumda bununla ilgili bilgi vermek için kullanılır. Aşağıdaki örneği inceleyiniz:

<div *hvlIfNotGranted="['mailYetki', 'mailGrupYetki']">
  Yetkiniz bulunmamaktadır
</div>
Yukarıdaki örnekte div elementi kullanıcı mailYetki ve mailGrupYetki yetkilerinin hiçbirine sahip değilse ekranda görünecektir.


Guard#

HvlAuthenticatedGuard#

Bu guard routing tanımlarında sadece login olmuş kullanıcıların görmesi istenilen kısımları belirtmek için kullanılır. Aşağıdaki örneği inceleyiniz:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HvlAuthenticatedGuard, HvlAuthorizationGuard } from '@hvlng/framework-bff/security';

export const routes: Routes = [
    {
        path: 'egitim-islemleri',
        canActivate: [HvlAuthenticatedGuard],
        loadChildren: () => import('projects/egitim/src/app/egitim-agg.module').then((m) => m.EgitimAggModule),
    },
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule],
})
export class EgitimAllAggRoutingModule {}
Yukarıdaki routing tanımına göre '/egitim-islemleri' yolundaki ekranları sadece login olmuş kullanıcılar görebilir.

HvlAuthorizationGuard#

Bu guard routing tanımlarında sadece belirtilen yetkilere sahip kullanıcıların görmesi istenilen kısımları belirtmek için kullanılır. Aşağıdaki örneği inceleyiniz:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HvlAuthenticatedGuard, HvlAuthorizationGuard } from '@hvlng/framework-bff/security';

export const routes: Routes = [
    {
        path: 'egitim-islemleri',
        canActivate: [HvlAuthenticatedGuard, HvlAuthorizationGuard],
        data: {
            authorities: ['egitim'],
        },
        loadChildren: () => import('projects/egitim/src/app/egitim-agg.module').then((m) => m.EgitimAggModule),
    },
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule],
})
export class EgitimAllAggRoutingModule {}
Yukarıdaki routing tanımına göre '/egitim-islemleri' yolundaki ekranları sadece login olmuş ve egitim yetkisine sahip kullanıcılar görebilir.


Interceptor#

Angular'da interceptor'lar istenilen bazı işlerde araya girerek işin öncesinde ve/veya sonrasında işe müdahil olarak ekstra işlemler yapılabilmesine olanak sağlar. Genellikle http isteklerinin arasına girilerek yetki işlemleri, parametre değişikliği yada hata yakalayıp tek bir yerde değerlendirme gibi işlemler yapılır.

BFF modülünde sunulan interceptor'lar aşağıda açıklanmıştır.

HvlSecurityInterceptor#

HvlSecurityInterceptor bir http interceptor'dür. Http isteklerinde sadece sunucudan hata alınan durumlarda istek sonrasında araya girerek eğer hata yetkilendirme ile ilgili ise kullanıcıyı login sayfasına yönlendirir. Bu davranışın etkin olması için core.security.enabled ayarının true olması gerekmektedir.

HvlSecurityInterceptor'ın bir modülde kullanımı aşağıda örneklenmiştir.

import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { HvlSecurityInterceptor } from '@hvlng/framework-bff/security';

@NgModule({
    declarations: [ ... ],
    imports: [ ... ],
    providers: [
        { provide: HTTP_INTERCEPTORS, useClass: HvlSecurityInterceptor, multi: true },
        ...
    ]
    exports: [ ... ],
})
export class MyAppModule {}

HvlTenantInterceptor#

HvlTenantInterceptor bir http interceptor'dür. Multi tenant çalışacak uygulamalarda kullanımı uygundur. Kullanıcının tenant-id bilgisini her istek için istek url'ine parametre olarak ekleyerek istek bazında tenant bilgisinin sunucuya iletilmesini sağlar.

HvlTenantInterceptor'ın bir modülde kullanımı aşağıda örneklenmiştir.

import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { HvlTenantInterceptor } from '@hvlng/framework-bff/security';

@NgModule({
    declarations: [ ... ],
    imports: [ ... ],
    providers: [
        { provide: HTTP_INTERCEPTORS, useClass: HvlTenantInterceptor, multi: true },
        ...
    ]
    exports: [ ... ],
})
export class MyAppModule {}
#

Service#

BFF Security modülünde sunulan servisler aşağıda açıklanmıştır.

HvlAuthAuthenticationRestService#

Keysys backend'i ile uyumlu olarak login, logout gibi metodlar sunan servistir. Bu servisin kullanımı ile ekranlar (login ekranı gibi) Theme paketinde yer almaktadır.

HvlAuthVerificationRestService#

Keysys backend'i ile uyumlu olarak Captcha gibi ikinci seviye doğrulama işlemleri için metodlar sunan servistir. Bu servisin kullanımı ile ekranlar (captcha ekranı gibi) Theme paketinde yer almaktadır.

HvlAuthzEventLogRestService#

Keysys backend'i ile uyumlu olarak kullanıcıların başarılı yada başarısız sisteme giriş kayıtları ile ilgili metodlar sunan servistir. Metodlar aşağıda açıklanmıştır:

Metod Açıklama
pageLoginHistoryByCurrentUser Oturum sahibi kullanıcı için giriş kayıtlarının sayfaları olarak getirilmesini sağlar
failedLoginExistByCurrentUser Oturum sahibi kullanıcı için başarısız giriş denemesi olup olmadığını döner
queryList Giriş kayıtları sorgulanmasını sağlar
queryPage Giriş kayıtlarının sayfalı olarak sorgulanmasını sağlar

HvlAuthzRegistrationRestService#

Keysys backend'i ile uyumlu olarak kullanıcı kayıt işlemi ile ilgili metodlar sunan servistir. Bu servisin kullanımı ile ekranlar Theme paketinde yer almaktadır.

HvlAuthzSessionRestService#

Eksen backend'leri ile uyumlu olarak login süreci tamamlanmış kullanıcının oturum bilgilerinin alınması için aşağıdaki metodları sunan servistir. Bu servisin kullanımı ile ekranlar (profil seçim ekranı gibi) Theme paketinde yer almaktadır.

Metod Açıklama
fillSessionWithAuthorityByProfile Oturum bilgilerinin verilen profil için alınmaını sağlar
fillWithAuthority Oturum bilgilerinin alınmaını sağlar

HvlAuthzTenantRestService#

Eksen backend'leri ile uyumlu olarak tenant listesinin alınması için metod sunan servistir.

HvlAuthzUserDetailRestService#

Keysys backend'leri ile uyumlu olarak kullanıcı tipi listesinin alınması için metod sunan servistir.

HvlAuthzUserPasswordPolicyRestService#

Keysys backend'leri ile uyumlu olarak kullanıcı parola politikası ile ilgili bilgi alınması için metod sunan servistir.

HvlAuthzUserRestService#

Keysys backend'leri ile uyumlu olarak kullanıcı şifre değişimi ile ilgili metodlar sunan servistir.

HvlSecurityService#

Güvenlikle ilgili genel metodlar sunan servistir. Oturumu açmış olan kullanıcı, kullanıcının yetkileri ile ilgili bilgilere erişmek gerektiğinde kullanılabilir. Sağlanan servisler aşağıda açıklanmıştır.

Metod Açıklama
isSecurityActive Güvenlik açık/değil bilgisini döner
user Oturumdaki kullanıcı nesnesini döner
hasAuthority Parametre ile verilen yetkiye oturum açmış kullanıcının yetkisi olup/olmadığı bilgisini döner
isAuthenticatedUser Oturumun sisteme giriş yapmış bir kullanıcıya ait olduğunu döner

HvlSessionRestService#

Eksen backend'leri ile uyumlu olarak oturum yönetimi ile ilgili metodlar sunan servistir. Bu metodlar aşağıda açıklanmıştır.

Metod Açıklama
closeByUser Parametre ile alınan id bilgisi üzerinden oturum kapatmayı sağlar
closeAllByUser Parametre ile alınan id bilgisi üzerinden kullanıcıya ait tüm oturumların kapatılmasını sağlar
closeAllByUsername Parametre ile alınan kullanıcı kodu üzerinden kullanıcıya ait tüm oturumların kapatılmasını sağlar
closeAllSessions Parametre ile alınan oturum listeki tüm oturumların kapatılmasını sağlar
queryPageByUser Oturum bilgileri üzerinden sorgulama yapılmasını sağlar
queryPage Oturum bilgileri üzerinden sayfalı sorgulama yapılmasını sağlar
countByCurrentUser Aktif kullanıcının oturum sayısını döner

HvlSystemSettingRestService#

Eksen altyapısı bileşenleriden setting'e ait backend servisleri üzerinden işlem yapılabilmesi için metodlar sunan servistir. Bu metodlar aşağıda açıklanmıştır.

Metod Açıklama
getBooleanSettingByCode Ayar kodu üzerinden boolean ayar değerinin alınmasını sağlar
getNumberSettingByCode Ayar kodu üzerinden numerik ayar değerinin alınmasını sağlar
getStringSettingByCode Ayar kodu üzerinden string ayar değerinin alınmasını sağlar
getNumberSettingByCodeAndTenant Ayar kodu ve tenant parametre üzerinden numerik ayar değerinin alınmasını sağlar
getBooleanSettingByCodeAndTenant Ayar kode ve tenant parametre üzerinden boolean ayar değerinin alınmasını sağlar
getStringSettingByCodeAndTenant Ayar kode ve tenant parametre üzerinden string ayar değerinin alınmasını sağlar
getSettingListByType typeId parametresi üzerinden ayarların alınmasını sağlar
update Ayar güncellemesi yapılmasını sağlar

Model#

Bu paket bff security modülleri tarafından sağlanan servis ve bileşenler tarafından kullanılan modelleri içerir.

Bu modelleri ve içerdiği alanları IDE'niz üzerinden inceleyebilirsiniz.


DB#

Bu paket html 5 ile gelen indexed-db desteğini kullanarak kullanıcı, yetki ve oturumla ilgili bilgileri veritabanında saklanmasını sağlayan sınıflar içerir. Bu paketteki işlevler dışarıya açık değildir.