> Źródło: https://redai.pl/dev/do-czego-modul-ma-dostep-i-zasady/ (dokumentacja modułów portalu redAi). Cała dokumentacja w jednym pliku: https://redai.pl/dev/moduly.md

## Do czego moduł ma dostęp i zasady

Kod modułu działa w tym samym procesie co portal. Technicznie mógłby więcej, niż mu wolno, dlatego poniższe zasady sprawdzamy przy każdym akcepcie. Złamanie którejkolwiek = odrzucenie wydania, a w poważnym przypadku blokada modułu i konta.

**Moduł może:**

- czytać i zapisywać **własne tabele** (prefiks = klucz modułu),
- czytać i zapisywać **własne ustawienia** w `App\Models\Setting` (klucz zaczyna się od klucza modułu),
- czytać zalogowaną osobę (`$request->user()`) oraz listę osób i grup (`App\Models\User`, `App\Models\UserGroup`), żeby przypisywać rekordy i ustawiać widoczność,
- czytać projekty, ich członków i powiązanie czatu z projektem przez `App\Narzedzia\Projekty` oraz zakładać czaty z pierwszą wiadomością przez `App\Narzedzia\Rozmowy::zaloz()` (sekcja Projekty i czaty),
- zapisywać pliki w `storage/app/<klucz>/` i czytać pliki z własnego folderu,
- używać wspólnych elementów portalu z tabeli w sekcji Widoki, kolejki (`dispatch`), maila portalu (`Mail`) i klienta HTTP Laravela (`Http`) w granicach zasad niżej,
- dodawać haki, skille czatu, zadania cykliczne i krótkie adresy.

**Moduł nie może:**

1. **Zapisywać do tabel, których nie założył.** Tabele portalu (czaty, projekty, pliki, użytkownicy, ustawienia innych modułów) są tylko do odczytu, i to tylko w zakresie z listy wyżej. Jeśli potrzebujecie więcej, napiszcie do nas.
2. **Ruszać plików portalu** ani innych modułów: bez zapisu do `app/`, `routes/`, `config/`, `resources/`, `public/`, `.env`, `bootstrap/`, `vendor/`, `narzedzia/<inny klucz>/`.
3. **Łączyć się z siecią poza tym, co zadeklarowaliście.** Każdy zewnętrzny adres, z którym moduł rozmawia, wpisujecie w `opis_pozycji.szczegoly` (np. „Moduł pobiera kursy walut z api.nbp.pl”) i w polu `uwagi` przy wysyłce. Niezadeklarowane połączenie = odrzucenie.
4. **Mieć sekretów w paczce**: haseł, tokenów, kluczy API, plików `.env`, danych dostępowych do czegokolwiek. Sekrety wpisuje administrator instancji w ustawieniach modułu.
5. **Uruchamiać programów systemu**: bez `exec`, `shell_exec`, `system`, `passthru`, `proc_open`, `popen`, odwrotnych apostrofów, `eval` i ładowania kodu z sieci.
6. **Wysyłać danych klienta poza instancję bez jego zgody.** Dane firmy zostają na instancji. Wyjątek: wysyłka jest celem modułu, jest opisana w `opis_pozycji` i administrator świadomie włącza moduł (np. wysyłka faktur do systemu księgowego).
7. **Zmieniać zachowania portalu poza hakami**: bez podmiany widoków portalu, globalnych middleware, nadpisywania tras portalu i własnych tras `/{cos}` w przestrzeni krótkich adresów.
8. **Ukrywać działania**: kod ma być czytelny, bez zaciemniania, bez plików binarnych z kodem i bez minifikowanego PHP.

