aaieduhr/aosi-module-mysql 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

aaieduhr/aosi-module-mysql

最新稳定版本:v5.0.0

Composer 安装命令:

composer require aaieduhr/aosi-module-mysql

包简介

AOSI MySQL Module

README 文档

README

Sadržaj

Pregled

AOSI MySQL modul sinkronizira korisničke podatke iz LDAP direktorija sa MySQL bazom podataka svaki put kada se kroz AOSI nad njima izvrši promjena.

Modul pohranjuje:

  1. [x] zapise o korisnicima
  2. [x] odabrane LDAP atribute
  3. [x] vrijednosti atributa

Time se omogućuje da se vanjski sustavi oslanjaju na bazu podataka umjesto na direktan pristup LDAP-u za dohvat određenih korisničkih podataka.

Tipični scenarij upotrebe

Primjer tijeka rada:

  1. Administrator u AOSI-ju kreira korisnika u LDAP direktoriju
  2. Modul detektira događaj
  3. Podaci se upisuju u MySQL bazu
  4. Vanjski sustavi čitaju podatke iz baze

Isto vrijedi i za:

  • brisanje korisnika
  • dodavanje atributa
  • izmjene atributa
  • brisanje atributa

Struktura baze podataka

Tablica korisnika

Sadrži po jedan redak za svakog LDAP korisnika.

CREATE TABLE `user` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `persistent_id` VARCHAR(32) NOT NULL,
    `uid` VARCHAR(30) NOT NULL,
    `changed_by` VARCHAR(30),
    `active` TINYINT(1) DEFAULT NULL,
    `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uniq_persistent_id` (persistent_id)
);

Tablica vrijednosti atributa

Sadrži po jedan redak za svaku pojedinu vrijednost atributa.

CREATE TABLE attribute_value (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT NOT NULL,
    `name` VARCHAR(50) NOT NULL,
    `value` VARCHAR(250) NOT NULL,
    `active` TINYINT(1) DEFAULT NULL,
    UNIQUE KEY `uniq_userid_name_value` (user_id, name, value)
);

Napomena:
Ako vrijednost ključa active_col u konfiguraciji modula nije definirana → zapisi se brišu trajno.
Ako je definirana → upotrebljava se deaktivacija (soft-delete) (active = 0).

Konfiguracija modula

Konfiguracijska datoteka: config/mysql.php

return [
    'db_connection' => 'default',
    'users_table' => 'user',
    'values_table' => 'attribute',
    'uid' => 'uid',
    'active_col' => 'active',
    'changedby_col' => 'changed_by',
    'attribute_list' => 'cn,
                         sn,
                         givenName,
                         hrEduPersonUniqueID,
                         hrEduPersonPersistentID,
                         hrEduPersonExpireDate',
];

Konfiguracijski parametri

db_connection :

Naziv konekcije iz database.php.

users_table :

Naziv tablice korisnika.

values_table :

Naziv tablice atributa.

uid :

Jedinstveni identifikator korisnika.

Podržano:

uid
dn
hrEduPersonUniqueID

active_col :

Omogućuje soft-delete.

changedby_col :

Korisnik koji je napravio promjenu.

attribute_list :

LDAP atributi koji se sinkroniziraju.

Opis rada

Event-driven arhitektura:

  • Before-* (validacija)
  • After-* (sinkronizacija)

Sve funkcije modula pokreću se pojavom signala događaja ("Events") vezanih uz uz specifične operacije nad LDAP imenikom izvršene putem AOSI aplikacije.

Operacije:

  • dodavanje korisnika (skupa s pripadajućim atributima)
  • brisanje korisnika
  • dodavanje (vrijednosti) atributa
  • izmjena vrijednosti atributa
  • brisanje (vrijednosti) atributa

Signali se dijele na predoperacijske i postoperacijske. Predoperacijski se aktiviraju prije početka ("Before-*") LDAP operacije dok se postoperacijski aktiviraju po njenom uspješnom izvršenju ("After-*").

Primjeri:

BeforeAddUserEvent
AfterAddUserEvent
BeforeModifyUserAttributeEvent
AfterDeleteUserAttributeEvent

Signalima se pozivaju metode modula. Općenita je namjena predoperacijskih metoda da obave neku provjeru (npr. postoji li već isti korisnik u bazi prije negoli ga dodamo) te na temelju njenog rezultata blokiraju ili dozvole samu operaciju u LDAP-u, dok su postoperacijske metode te koje uobičajeno služe za sinkronizaciju, odnosno "prepisivanje" novog stanja podataka iz LDAP imenika u podatkovnu bazu.

Dodavanje korisnika

Predoperacijska metoda: beforeAddUser → Obustavlja dodavanje korisnika u LDAP imenik ako se aktivni korisnik s istim jedinstvenim identifikatorom (UID) već nalazi u podatkovnoj bazi.

Postoperacijska metoda: afterAddUser → Dodaje novog (ili reaktivira postojećeg neaktivnog) korisnika u tablici korisnika te sinkronizira skup vrijednosti svih njegovih pripadajućih atributa sa skupom zatečenim u tablici vrijednosti atributa.1

Napomena:
Pri dodavanju korisnika (i samo pri dodavanju), ako je u pod. bazi pronađen deaktivirani raniji zapis i istim UID-om, smatra se da on pripada tom korisniku isključivo ako se osim UID-a podudara i hrEduPersonPersistentID. U slučaju da se vrijednosti hrEduPersonPersistentID-ja ne podudaraju, stvara se zapis o novom korisniku s novim hrEduPersistentID-jem. U svim ostalim operacijama nad LDAP imenikom koje podržava ovaj modul, korisnik se identificira samo po UID-u.

Rezultat:

  • novi/reaktivirani zapis korisnika u tablici korisnika
  • vrijednosti atributa korisnika spremljeni u tablicu vrijednosti atributa

Brisanje korisnika

Predoperacijska metoda: \

Postoperacijska metoda: afterDeleteUser → Briše ili deaktivira2 korisnika u podatkovnoj bazi. U slučaju same deaktivacije korisnika, zapisi o vrijednostima njegovih atributa ostaju netaknuti (zapisani kao aktivni). U suprotnom, i korisnik i svi pripadajući mu atributi brišu se iz baze.

Rezultat:

  • s uključenom postavkom soft-delete korisnik se deaktivira; u suprotnom se briše
  • s uključenom postavkom soft-delete atributi ostaju netaknuti; u suprotnom se brišu

Dodavanje vrijednosti atributa

Predoperacijska metoda: beforeAddUserAttribute → Obustavlja dodavanje (vrijednosti) atributa korisnika u LDAP imenik ako nije pronađen zapis koji dokazuje da taj korisnik postoji u podatkovnoj bazi i da je aktivan.

Postoperacijska metoda: afterAddUserAttribute → Dodaje novu vrijednost atributa u bazu ili reaktivira istu koja je ranije bila deaktivirana.

Rezultat:

  • vrijednosti atributa dodaju se u bazu

Izmjena vrijednosti atributa

Predoperacijska metoda: beforeModifyUserAttribute → Obustavlja izmjenu vrijednosti atributa korisnika u LDAP imeniku ako nije pronađen zapis koji dokazuje da taj korisnik postoji u podatkovnoj bazi i da je aktivan.

Postoperacijska metoda: afterModifyUserAttribute → Sinkronizira novi skup vrijednosti atributa (jedne ili više njih - ako se radi o atributu s višestrukim vrijednostima) s postojećim skupom iz baze.3

Rezultat:

  • stare vrijednosti se uklanjaju
  • nove vrijednosti se upisuju

Brisanje vrijednosti atributa

Predoperacijska metoda: beforeDeleteUserAttribute → Obustavlja brisanje (vrijednosti) atributa korisnika u LDAP imeniku ako nije pronađen zapis koji dokazuje da taj korisnik postoji u podatkovnoj bazi i da je aktivan.

Postoperacijska metoda: afterDeleteUserAttribute → Briše ili deaktivira2 specifičnu vrijednost atributa u bazi.

Rezultat:

  • vrijednosti atributa se brišu ili deaktiviraju ako je uključena postavka soft-delete

[1]: Ako je korisnik jednom bio aktivan te je nakon toga bio deaktiviran (obrisan s uključenom postavkom za soft-delete3.1), dodavanjem tog istog korisnika (s istim UID-om i istim hrEduPersonPersistentID-jem) reaktivirat će se njegov stari zapis u tablici korisnika. Vrijednosti atributa ne brišu se ni deaktiviraju samom deaktivacijom korisnika - za to bi iste morale biti same ručno deaktivirane ranije. Umjesto toga, njihovi zapisi u tablici vrijednosti atributa ostaju netaknuti sve dok ne reaktiviramo njihovog vlasnika. Tada se događa sinkronizacija sa skupom novih atributa i njihovih vrijednosti: aktivne stare vrijednosti koje za reaktiviranog korisnika i dalje vrijede ne diraju se; vrijednosti koje za reaktiviranog korisnika više ne vrijede deaktiviraju se, a vrijednosti kojih prije uopće nije bilo u tablici se dodaju.

[2]: ako je uključena postavka soft-delete

[3]: Sinkronizacija u slučaju izmjene vrijednosti atributa se odvija tako da se stare vrijednosti atributa, neovisno o postavci soft-delete, uvijek potpuno brišu iz baze ako ih više nema u skupu novih vrijednosti. Ovo je zadano ponašanje modula.

Transakcije i konzistentnost

Sve operacije nad bazom izvršavaju se unutar transakcije.

Ako dođe do greške:

  • transakcija se poništava
  • LDAP operacija može biti zaustavljena

Na taj način LDAP imenik i baza ostaju sinkronizirani.

Model pohrane atributa

Neki LDAP atributi mogu imati više vrijednosti.

Primjer LDAP zapisa:

mail: user@example.com
mail: user2@example.com

Pohrana u bazi:

user_idnamevalue
10mailadresa1@mail.hr
10mailadresa2@mail.hr

Obrada grešaka

Sve predoperacijske i postoperacijske metode vraćaju niz:

[error_code, message, previous_error]

Primjer:

[-10210, "User already exists!", 0]

Ako error_code nije 0, LDAP operacija može biti prekinuta.

Sigurnosne preporuke

Preporučuje se:

  • ograničiti attribute_list
  • ne spremati LDAP atribute s osjetljivim informacijama
  • ograničiti pristup bazi
  • redovito izrađivati sigurnosne kopije baze

Rješavanje problema

Korisnik se ne pojavljuje u bazi:

Provjeriti:

  • konfiguraciju attribute_list
  • mapiranje UID-a
  • konekciju prema bazi
  • posljednje unose u dnevničkim zapisima (data/logs/app.log)

Nedostaju atributi

Provjeriti nalaze li se definirani u konfiguracijskoj postavci:

mysql.attribute_list

Brisanje korisnika ne uklanja zapise

Ako je definiran active_col, zapisi se ne brišu nego deaktiviraju.

Preporučene primjene

Modul je posebno koristan za:

  • sinkronizaciju identiteta između sustava
  • automatizaciju korisničkih računa (user provisioning)
  • integraciju aplikacija bez LDAP podrške
  • analitičke i izvještajne sustave

统计信息

  • 总下载量: 58
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固