Wersja: v0.2.0-alpha
English | Deutsch | 中文 | 繁體中文 | Español | 日本語 | 한국어 | Čeština | Русский
System uprawnień zapewnia, że wszystkie operacje inicjowane przez AI przechodzą przez odpowiednią weryfikację i audyt.
┌─────────────────────────────────────────────┐
│ Weryfikacja uprawnień │
├─────────────────────────────────────────────┤
│ Poziom 1: UserFrequencyCache │
│ ↓ Pamięć podręczna decyzji użytkownika o wysokiej częstotliwości (HighDeny/HighAllow) │
│ Poziom 2: IPermissionCallback │
│ ↓ Niestandardowa logika (Allowed/Denied/AskUser) │
│ Poziom 3: IsCurator? │
│ ↓ Tak → IPermissionAskHandler (zapytaj użytkownika) │
│ ↓ Nie → GlobalACL → domyślnie odmowa │
│ Wynik: zezwolenie lub odmowa │
└─────────────────────────────────────────────┘
Uwaga: Rzeczywisty priorytet zapytań
PermissionManager.CheckPermission()to:
- UserFrequencyCache — najpierw sprawdzana jest pamięć podręczna decyzji użytkownika o wysokiej częstotliwości
- IPermissionCallback — ocena niestandardowych reguł wywołania zwrotnego
- Gałąź Kuratora — gdy wywołanie zwrotne zwraca AskUser lub brak wywołania zwrotnego:
- Kurator →
IPermissionAskHandler(zapytanie do użytkownika przez IM)- Nie-Kurator →
GlobalACL→ domyślnie odmowa
Pamięć podręczna decyzji użytkownika o wysokiej częstotliwości (HighDeny/HighAllow) dla każdej istoty, istnieje tylko w pamięci.
var cache = new UserFrequencyCache();
PermissionResult? cachedResult = cache.Query(permissionType, resource);
if (cachedResult.HasValue)
{
return cachedResult.Value == PermissionResult.Allowed;
}- HighDeny ma priorytet nad HighAllow
- Tylko w pamięci: pamięć podręczna nie jest utrwalana, po restarcie jest tracona
- Konfigurowalny czas wygaśnięcia: użytkownik może ustawić okres ważności wpisów pamięci podręcznej
Niestandardowe wywołanie zwrotne do dynamicznej logiki uprawnień.
DefaultPermissionCallback zapewnia kompleksowe domyślne reguły uprawnień, w tym:
- Adresy pętli zwrotnej: zezwolenie na localhost, 127.0.0.1, ::1
- Prywatne adresy IP:
- 192.168.x.x (Klasa C) - zezwolenie
- 10.x.x.x (Klasa A) - zezwolenie
- 172.16-31.x.x (Klasa B) - zapytaj użytkownika
- Biała lista domen:
- Wyszukiwarki: Google, Bing, DuckDuckGo, Yandex, Sogou itp.
- Usługi AI: OpenAI, Anthropic, HuggingFace, Ollama itp.
- Usługi deweloperskie: GitHub, StackOverflow, npm, NuGet itp.
- Media społecznościowe: Weibo, Zhihu, Reddit, Discord itp.
- Platformy wideo: YouTube, Bilibili, Douyin, TikTok itp.
- Informacje pogodowe: wttr.in
- Strony rządowe: .gov, .go.jp, .go.kr
- Czarna lista domen:
- Witryny podszywające się pod AI: chatgpt, openai, deepseek i inne domeny imitujące
- Złośliwe narzędzia AI: wormgpt, darkgpt, fraudgpt itp.
- Farmy treści AI i domeny związane z czarnym rynkiem
public class DefaultPermissionCallback : IPermissionCallback
{
public PermissionResult Evaluate(Guid callerId, PermissionType permissionType, string resource)
{
if (IsSafeOperation(permissionType, resource))
{
return PermissionResult.Allowed;
}
return PermissionResult.AskUser;
}
}Gdy wywołanie zwrotne zwraca AskUser lub nie ma skonfigurowanego wywołania zwrotnego, system rozgałęzia się na podstawie statusu Kuratora:
Dla Kuratora Krzemowego system prosi użytkownika o decyzję przez komunikator:
if (IsCurator)
{
if (_askHandler != null)
{
AskPermissionResult userDecision = _askHandler.AskUser(callerId, permissionType, resource);
// Użytkownik potwierdza lub odmawia w Web UI
}
}Dla istot nie-Kuratorów system sprawdza Globalną Listę Kontroli Dostępu. Jeśli nie ma pasującej reguły, domyślnie odmawia żądania.
{
"rules": [
{
"permissionType": "NetworkAccess",
"resourcePrefix": "api.github.com",
"result": "Allowed"
},
{
"permissionType": "FileAccess",
"resourcePrefix": "C:\\Windows",
"result": "Denied"
}
]
}Reguły są oceniane w kolejności, pierwsza pasująca reguła ma zastosowanie. Tylko Kurator Krzemowy może modyfikować Globalną ACL.
{typ}:{ścieżka}
Przykłady:
- network:api.github.com
- file:C:\\Windows
- cli:rm -rf
Gdy operacja Kuratora wymaga potwierdzenia użytkownika, IPermissionAskHandler pyta o uprawnienia.
IMPermissionAskHandler wysyła żądanie uprawnień do użytkownika przez Web UI:
public class IMPermissionAskHandler : IPermissionAskHandler
{
public AskPermissionResult AskUser(Guid callerId, PermissionType permissionType, string resource)
{
// Wysyłanie wiadomości do użytkownika przez komunikator
SendMessageAsync($"Zezwolić na {resource}?");
// Oczekiwanie na odpowiedź użytkownika
var response = WaitForResponseAsync();
return response.Approved
? AskPermissionResult.Approved()
: AskPermissionResult.Denied();
}
}PermissionRequestQueue zarządza oczekującymi żądaniami uprawnień, obsługując asynchroniczne oczekiwanie na odpowiedź użytkownika:
- Kolejkowanie żądań — gdy łańcuch uprawnień osiągnie poziom 5, tworzy
TaskCompletionSource<AskPermissionResult>i dodaje do kolejki - Wyświetlanie w Web UI — przez
PermissionRequestControllerwyświetla oczekujące żądania uprawnień w Web UI - Odpowiedź użytkownika — użytkownik zatwierdza lub odmawia w Web UI, z opcją buforowania decyzji i ustawienia czasu trwania pamięci podręcznej
- Opcje pamięci podręcznej — użytkownik może buforować decyzje uprawnień na 1 godzinę, 24 godziny, 7 dni lub 30 dni
- Mechanizm timeout — brak odpowiedzi przez 60 sekund automatycznie zamyka stronę żądania
Wszystkie decyzje dotyczące uprawnień są rejestrowane:
{
"timestamp": "2026-04-20T10:30:00Z",
"callerId": "being-uuid",
"permissionType": "FileAccess",
"resource": "C:\\data\\config.json",
"result": "Allowed",
"reason": "Global ACL"
}Metoda PermissionManager.EvaluatePermission() zapewnia ocenę wstępną uprawnień tylko do odczytu, nie wyzwalając monitów dla użytkownika. PermissionTool wykorzystuje tę metodę, aby pozwolić AI sprawdzić status uprawnień przed próbą operacji.
public PermissionResult EvaluatePermission(
Guid callerId,
PermissionType permissionType,
string resource)Wartość zwracana: trójstanowe PermissionResult:
Allowed- operacja jest dozwolonaDenied- operacja jest odrzuconaAskUser- wymagane potwierdzenie użytkownika przy wykonaniu
Kolejność oceny:
- Pamięć podręczna częstotliwości - sprawdzenie zbuforowanych decyzji użytkownika
- IPermissionCallback - ocena niestandardowego wywołania zwrotnego
- Status Kuratora - jeśli Kurator, zwraca
AskUser(wymagane potwierdzenie) - Globalna ACL - sprawdzenie reguł kontroli dostępu
- Domyślnie - odmowa przy braku pasującej reguły
Uwaga: W przeciwieństwie do pełnego łańcucha uprawnień,
EvaluatePermissionnie wywołujeIPermissionAskHandler. Raportuje jedynie, jaki wynik będzie przy wykonaniu.
Przez Web UI:
- Przejdź do Zarządzanie uprawnieniami
- Kliknij Dodaj regułę
- Skonfiguruj:
- Użytkownik
- Zasób
- Zezwól/Odmów
- Czas trwania
Przez API:
curl -X POST http://localhost:8080/api/permissions/save \
-H "Content-Type: application/json" \
-d '{
"permissionType": "FileAccess",
"resourcePrefix": "C:\\Projects",
"result": "Allowed",
"description": "Allow project directory access"
}'Przez stronę zarządzania uprawnieniami w Web UI.
curl http://localhost:8080/api/permissions/listOprócz łańcucha weryfikacji uprawnień na poziomie operacji, system zapewnia mechanizm zarządzania uprawnieniami narzędzi, kontrolujący które narzędzia mogą być używane przez Istoty Krzemowe.
Uprawnienia narzędzi są podzielone na dwa poziomy:
- Poziom Istoty Krzemowej — kontroluje, które operacje narzędzi może używać pojedyncza Istota Krzemowa
- Poziom projektu — kontroluje operacje narzędzi dostępne w przestrzeni projektowej, niezależnie od uprawnień na poziomie Istoty Krzemowej
Każda operacja każdego narzędzia może być niezależnie skonfigurowana jako dozwolona lub odrzucona:
{
"beingId": "being-uuid",
"permissions": {
"network:get": "allowed",
"network:post": "denied",
"disk:read": "allowed",
"disk:write": "denied",
"database:query": "allowed"
}
}System dostarcza predefiniowane szablony uprawnień narzędzi, które można szybko zastosować do Istot Krzemowych:
- readonly — uprawnienia tylko do odczytu (zezwalają na operacje odczytu, odmawiają operacji zapisu)
- full — pełne uprawnienia (zezwalają na wszystkie operacje)
- restricted — ograniczone uprawnienia (zezwalają tylko na podstawowe operacje)
Zarządzanie uprawnieniami narzędzi przez Web UI:
- Strona uprawnień narzędzi Istoty Krzemowej —
/beings/tool-permissions - Strona uprawnień narzędzi projektu —
/project/{id}/tool-permissions
| Endpoint | Metoda | Opis |
|---|---|---|
/api/beings/tool-permissions |
GET | Pobierz uprawnienia narzędzi Istoty Krzemowej |
/api/beings/tool-permissions |
PUT | Aktualizuj uprawnienia narzędzi Istoty Krzemowej |
/api/beings/tool-permissions/templates |
GET | Pobierz listę szablonów uprawnień |
/api/beings/tool-permissions/apply-template |
POST | Zastosuj szablon uprawnień |
/api/projects/{id}/tool-permissions |
GET | Pobierz uprawnienia narzędzi projektu |
/api/projects/{id}/tool-permissions |
PUT | Aktualizuj uprawnienia narzędzi projektu |
Nadawaj tylko minimalne wymagane uprawnienia:
{
"permissionType": "FileAccess",
"resourcePrefix": "C:\\Projects\\MyApp\\config.json",
"result": "Allowed"
}Nigdy nie nadawaj stałych uprawnień, chyba że jest to absolutnie konieczne.
Regularnie przeglądaj dzienniki audytu, aby zrozumieć:
- Odrzucone próby dostępu
- Nietypowe wzorce
- Eskalację uprawnień
Dla złożonej logiki używaj IPermissionCallback:
public PermissionResult Evaluate(Guid callerId, PermissionType permissionType, string resource)
{
// Uprawnienia oparte na czasie
if (IsOutsideBusinessHours())
{
return PermissionResult.Denied;
}
// Uprawnienia oparte na zasobach
if (IsSensitiveResource(resource))
{
return PermissionResult.AskUser;
}
return PermissionResult.Allowed;
}AI: "Muszę odczytać config.json"
↓
Łańcuch uprawnień:
1. UserFrequencyCache? Brak zbuforowanej decyzji
2. IPermissionCallback? Zwraca AskUser (niewyraźnie dozwolone)
3. IsCurator? Nie → sprawdź GlobalACL
4. GlobalACL? Znaleziono regułę: file:... = Allowed
5. Wynik: zezwolenie
AI: "Chcę skompilować i uruchomić kod"
↓
Łańcuch uprawnień:
1. UserFrequencyCache? Brak zbuforowanej decyzji
2. IPermissionCallback? Zwraca AskUser
3. IsCurator? Tak → IPermissionAskHandler
4. Użytkownik zatwierdza
5. Wynik: zezwolenie
AI: "Muszę uzyskać dostęp do C:\Windows"
↓
Łańcuch uprawnień:
1. UserFrequencyCache? Znaleziono w pamięci podręcznej HighDeny
2. Wynik: odmowa (bez dalszego sprawdzania)
Sprawdź:
- Status IsCurator użytkownika
- Wpisy HighDeny w pamięci podręcznej częstotliwości
- Reguły GlobalACL
- Logikę wywołania zwrotnego
- Timeout odpowiedzi użytkownika
Sprawdź:
- Pole
expiresAtjest poprawnie ustawione - Strefa czasowa jest poprawna
- Zegary są zsynchronizowane
Sprawdź:
- Audytor logów jest zarejestrowany
- Backend przechowywania jest dostępny
- Dostępna wystarczająca przestrzeń na dysku
- 📚 Przeczytaj przewodnik architektury
- 🛠️ Zobacz przewodnik deweloperski
- 🔒 Zobacz dokumentację bezpieczeństwa
- 🚀 Zobacz przewodnik szybkiego startu