Ana içeriğe geç

1.6.4. Kritik Yetki

Kritik Yetki#

Kritik yetkinin tanımlanmasındaki amaç, yetki atandığı zaman buna bağlı profil gruplarını bilgilendirmek içindir.

Kritik Yetki Tanımı#

Kritik yetkinin tanımı bu versiyon kapsamında, aşağıdaki liquibase script'i ile tanımlanmıştır:

<changeSet author="sgunes" context="dev,prod,dev-tenant" id="20230225-1">
    <addColumn tableName="kys_authority">
        <column name="critical" type="SMALLINT" defaultValue="0"/>
    </addColumn>
</changeSet>

Yetkilerdeki "kritik" kısmı default false olarak tanımlanmıştır.

Aynı zamanda yetkilerin ve profil gruplarının ilişkilerinin olduğu tablo tanımı da, indexleri ile beraber aşağıdaki liquibase scriptlerinde verilmiştir:

<!--Authority Profile Group Create Table-->
    <changeSet author="sgunes" context="dev,prod,dev-tenant" id="20230235-3">
        <createTable tableName="kys_authority_profile_group_rel">
            <column name="id" type="BIGINT">
                <constraints nullable="false" primaryKey="true" primaryKeyName="kys_authority_profile_group_rel_pkey"/>
            </column>
            <column name="created_by" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="created_at" type="TIMESTAMP WITHOUT TIME ZONE">
                <constraints nullable="false"/>
            </column>
            <column name="updated_at" type="TIMESTAMP WITHOUT TIME ZONE">
                <constraints nullable="false"/>
            </column>
            <column name="updated_by" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="uuid" type="VARCHAR(36)">
                <constraints nullable="false"/>
            </column>
            <column name="obj_version" type="INTEGER"/>
            <column name="deleted" type="SMALLINT">
                <constraints nullable="false"/>
            </column>
            <column name="deleted_at" type="TIMESTAMP WITHOUT TIME ZONE"/>
            <column name="authority_id" type="BIGINT">
                <constraints nullable="false"/>
            </column>
            <column name="profile_group_id" type="BIGINT">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
    <!--Authority Profile Group Relation Constraint-->
    <changeSet author="sgunes" context="dev,prod,dev-tenant" id="20230235-1">
        <addUniqueConstraint columnNames="uuid" constraintName="kys_authority_profile_group_rel_ukey1"
                             tableName="kys_authority_profile_group_rel"/>
    </changeSet>

    <!--Add Authority Profile Group Rel Sequence-->
    <changeSet author="sgunes (generated)" id="1680087170519-29">
        <createSequence cycle="false" incrementBy="10" maxValue="9223372036854775807"
                        minValue="31" sequenceName="kys_authority_profile_group_rel_seq" startValue="1000"/>
    </changeSet>
        <!--Add Authority Profile Group Rel Constraint-->
    <changeSet author="sgunes" context="dev,prod,dev-tenant" id="20230235-4" dbms="postgresql">
        <createIndex tableName="kys_authority_profile_group_rel" indexName="kys_authority_profile_group_rel_ukey2"
                     unique="true">
            <column name="authority_id"/>
            <column name="profile_group_id"/>
        </createIndex>
        <modifySql>
            <append value=" WHERE (deleted = 0)"/>
        </modifySql>
    </changeSet>
    <changeSet author="sgunes" id="1675324080397-340" context="dev,prod,dev-tenant" dbms="postgresql">
        <createIndex indexName="kys_authority_profile_group_rel_idx1" tableName="kys_authority_profile_group_rel">
            <column name="authority_id"/>
            <column name="deleted"/>
        </createIndex>
    </changeSet>
    <changeSet author="sgunes" id="1675324080397-341" context="dev,prod,dev-tenant" dbms="postgresql">
        <createIndex indexName="kys_authority_profile_group_rel_idx2" tableName="kys_authority_profile_group_rel">
            <column name="profile_group_id"/>
            <column name="deleted"/>
        </createIndex>
    </changeSet>

Kritik Yetki Kullanımı#

Bir yetkinin "kritik" yapılması istendiğinde takip edilecek adımlar aşağıdaki gibidir:

  • Gelen menüde Rol/Rol Grubu İşlemleri > Yetki İşlemleri'ne tıklanır.
  • Ekranda listelenen kayıtlardan birine tıklanır.
  • "Güncelle" butonuna basılır ve sidebar açılır.
  • Eğer yetki kritik değilse, kritik checkbox'ı işaretlenerek "kritik" özelliği verilir.
  • "Kaydet" butonuna tıklanır ve değişiklikler kaydedilir.

Kritik bir yetkinin bir profil grubu ile eşleştirilmesi istendiğinde takip edilecek adımlar aşağıdaki gibidir:

  • Menüde Genel Ayarlar > Kritik Yetki Profil Grup İşlemleri'ne tıklanır.
  • Ekranda listelenen kayıtlardan birine tıklanır.
  • "Yetki Güncelleme" butonuna basılır ve sidebar açılır.
  • Kritik yetki için eşleştirilmek istenen profil grup, picker componentten seçilir.
  • "Kaydet" butonuna tıklanır ve değişiklikler kaydedilir.

Bu işlemler sonunda aşağıdaki sonuçlar gözlemlenir:

  1. Herhangi bir yetki güncellenirken kritik değeri checkboxta işaretlenirse "AUTHORITY_CHANGE_TO_CRITICAL" event bilgisi gider.
  2. Profil, profil grup, vekalet modüllerinden herhangi birisine verilen rollerin içindeki yetkilerden biri ya da birden fazlası eğer "kritik" özelliğine sahipse, bu kritik yetkinin bağlı olduğu profil gruplarına bilgi gider.
  3. Ayrıca atanan profile, profil gruba ya da vekalete sahip olan kullanıcıya da kritik yetkinin bilgilendirme maili gider.
  4. Yukarıda verilen modüllere rol eklenmesi durumunda atılan mailin içerisinde eklenen ve çıkarılan rollerin adı, ilgili modülün uuid si gibi bilgiler yer alır. Aynı zamanda bu event tetiklendiği zaman modüllerin kafka consumer tarafında da eklene rollerin içerisinde "kritik" olarak işaretlenen herhangi bir yetkinin var olup olmadığı kontrol edilir. Varsa mailde kullanıcı adı, ilgili modül adı bilgileri mailin content kısmında yer alır.