dashboard for org

This commit is contained in:
root
2026-01-12 11:58:12 +03:00
parent d27f66953c
commit 246ca93307
30 changed files with 4362 additions and 125 deletions
+51
View File
@@ -0,0 +1,51 @@
<?php
namespace App\Models\Traits;
use CodeIgniter\Model;
/**
* Trait TenantScopedModel
*
* Обеспечивает автоматическую фильтрацию данных по активной организации.
* Использует organization_id из сессии пользователя.
*/
trait TenantScopedModel
{
/**
* Фильтрует запрос по текущей активной организации из сессии.
*
* Применение:
* $clients = $this->clientModel->forCurrentOrg()->findAll();
* $client = $this->clientModel->forCurrentOrg()->find($id);
*
* @return $this
*/
public function forCurrentOrg()
{
$session = session();
$orgId = $session->get('active_org_id');
// Если организации в сессии нет, предотвращаем утечку данных
// Возвращаем условие, которое всегда ложно
if (empty($orgId)) {
return $this->where('1=0');
}
// Имя поля с organization_id (можно переопределить в модели)
$field = $this->table . '.organization_id';
return $this->where($field, $orgId);
}
/**
* Проверяет, что запись принадлежит текущей организации.
*
* @param int $id ID записи
* @return bool
*/
public function belongsToCurrentOrg(int $id): bool
{
return $this->forCurrentOrg()->find($id) !== null;
}
}