doc(forgejo): WiP ... added forgejo documentation for 2nd level operation

This commit is contained in:
Stephan Lo 2025-06-29 16:54:29 +02:00
parent ea93b7360d
commit 19c30cfa51
8 changed files with 366 additions and 0 deletions

View file

@ -0,0 +1,35 @@
create user with simple password which doesn't need to be changed:
forgejo admin user create --username user-8 --email user-8@u.de --password p --must-change-password=false
create admin token in forgejo-instance with forgejo admin
410880a9c760:/var/lib/gitea$ forgejo admin user generate-access-token --username admin2 --token-name "automation-token4" --scopes write:admin,write:repository,write:organization,write:user,write:issue,write:misc
Access token was successfully created: d7497188e767ec44bfa06424e25cc7d2387399a0
add logn to tea
tea login add --url http://localhost:3000 --token d7497188e767ec44bfa06424e25cc7d2387399a0 --name myadmin
login to myadmin
tea login
┌────────────────┬───────────────────────┬────────────────┬──────────┬─────────┐
│ NAME │ URL │ SSH HOST │ USER │ DEFAULT │
├────────────────┼───────────────────────┼────────────────┼──────────┼─────────┤
│ localhost:3000 │ http://localhost:3000 │ localhost:3000 │ admin2 │ false │
│ admin │ http://localhost:3000 │ localhost:3000 │ johannes │ false │
│ myadmin │ http://localhost:3000 │ localhost:3000 │ admin2 │ false │
└────────────────┴───────────────────────┴────────────────┴──────────┴─────────┘
tea login myadmin
myadmin
@admin2 http://localhost:3000/admin2
Created: 29 Jun 25 12:39 CEST

View file

@ -0,0 +1,62 @@
Das `owners`-Team in Gitea/Forgejo ist **etwas Besonderes** und tatsächlich **hardcoded** hier sind die Details:
---
## 🧠 Bedeutung des `owners` Teams
### 🟩 Es ist **automatisch vorhanden**
* Jede Organisation hat immer ein Team namens `owners`.
* Dieses Team wird **automatisch erstellt**, wenn die Organisation erstellt wird.
### 🔐 Es hat **immer Admin-Rechte**
* Mitglieder des `owners`-Teams haben **volle Admin-Rechte** auf:
* alle Repositories der Organisation
* alle Teams
* die Organisation selbst (z.B. Mitgliederverwaltung, Einstellungen)
* Rechte können **nicht reduziert** oder **entfernt** werden.
* Nur Mitglieder dieses Teams können:
* neue Teams erstellen oder löschen
* andere Mitglieder zum `owners`-Team hinzufügen oder entfernen
### 🔒 Sicherheitsrelevant
* Dieses Team steuert **letztlich die Kontrolle über die gesamte Organisation**.
* Es ist vergleichbar mit „Org Admins“.
---
## 🔧 Muss ich das `owners`-Team konfigurieren?
### Nein aber:
* Du **musst es nicht konfigurieren**, es funktioniert immer.
* Du **kannst Mitglieder hinzufügen oder entfernen**, aber **nicht das Team selbst löschen oder umbenennen**.
### ✅ Empfehlungen:
* Nur vertrauenswürdige Personen (z.B. Projekt-Admins) sollten im `owners`-Team sein.
* Für andere Rollen (Contributor, Maintainer, Leser) solltest du **eigene Teams** mit passenden Rechten erstellen.
---
## 📘 Beispiel: Organisation mit klarer Rollentrennung
| Team | Beschreibung | Rechte |
| -------------- | ------------------------- | -------------------------- |
| `owners` | Orga-Admins (hartkodiert) | Admin |
| `maintainers` | Aktive Maintainer | Admin/Write je nach Bedarf |
| `contributors` | Beitragende Entwickler | Write |
| `readers` | Dürfen nur lesen | Read |
---
Wenn du möchtest, kann ich dir auch ein Skript bauen, das sicherstellt:
* Nur bestimmte Benutzer im `owners`-Team sind
* Alle anderen automatisch in passende andere Teams sortiert werden
Möchtest du so ein Beispiel oder ein Review-Skript für Orga-Mitglieder und deren Rechte?

View file

@ -0,0 +1,57 @@
@startuml
package "Forgejo/Gitea User-Organisation-Repo-Modell" {
class User {
+ id: int
+ username: string
+ email: string
}
class Organisation {
+ id: int
+ name: string
}
class OrgMember {
+ user_id: int
+ org_id: int
+ is_owner: bool
+ role: string
}
class Team {
+ id: int
+ org_id: int
+ name: string
+ permission_level: string
}
class Repository {
+ id: int
+ owner_id: int
+ name: string
+ is_private: bool
}
User "1" -- "0..*" OrgMember : membership
Organisation "1" -- "0..*" OrgMember : members
Organisation "1" -- "0..*" Team : teams
Team "1" -- "0..*" User : members
Team "1" -- "0..*" Repository : repos
Organisation "1" -- "0..*" Repository : owns
note right of OrgMember
Owner (is_owner = true) kann:
- Organisation verwalten
- Teams erstellen/löschen
- Mitglieder verwalten
end note
note left of Repository
Zugriff durch Teams nur möglich, wenn
Repository zu Organisation gehört.
Owner können Repository voll verwalten.
end note
}
@enduml

View file

@ -0,0 +1,63 @@
@startuml
package "Forgejo/Gitea System" {
package "Systemweite Benutzer & Rollen" {
class User {
+ id: int
+ username: string
+ email: string
}
}
package Organisation {
class Organisation {
+ id: int
+ name: string
}
class OrgMember {
+ user_id: int
+ org_id: int
+ is_owner: bool
+ role: string
}
class Team {
+ id: int
+ org_id: int
+ name: string
+ permission_level: string
}
}
package Repository {
class Repository {
+ id: int
+ owner_id: int
+ name: string
+ is_private: bool
}
}
User "1" -- "0..*" OrgMember : membership
Organisation "1" -- "0..*" OrgMember : members
Organisation "1" -- "0..*" Team : teams
Team "1" -- "0..*" User : members
Team "1" -- "0..*" Repository : repos
Organisation "1" -- "0..*" Repository : owns
note right of OrgMember
Owner (is_owner = true) kann:
- Organisation verwalten
- Teams erstellen/löschen
- Mitglieder verwalten
end note
note left of Repository
Zugriff durch Teams nur möglich, wenn
Repository zu Organisation gehört.
Owner können Repository voll verwalten.
end note
}
@enduml

View file

@ -0,0 +1,62 @@
@startuml
left to right direction
skinparam linetype ortho
skinparam classAttributeIconSize 0
hide circle
' Gruppierungen
package "Systemweite Benutzer und Rollen" {
class User {
+username
+email
+isAdmin
}
note right of User
Kann Organisationen erstellen
Kann eigenen Namespace verwalten
Kann systemweiter Admin sein
end note
}
package "Organisation" {
class Organisation {
+name
+visibility
}
class Team {
+name
+permissionLevel
+canCreateRepos
}
class OrgMember {
+role: member / owner
}
Organisation "1" -- "0..*" Team : verwaltet >
Organisation "1" -- "0..*" OrgMember : hat Mitglieder >
User "1" -- "0..*" OrgMember : ist >
OrgMember "1" -- "0..*" Team : gehört zu >
}
package "Repository" {
class Repository {
+name
+visibility
+owner: User|Organisation
}
Team "1" -- "0..*" Repository : Zugriff auf >
User "1" -- "0..*" Repository : direkte Rechte (optional) >
note right of Repository
Teams können nur auf Repositories zugreifen,
die zur selben Organisation gehören.
Nutzer-Repos können nicht über Teams geteilt werden.
end note
}
@enduml

View file

@ -0,0 +1,56 @@
@startuml
left to right direction
skinparam linetype ortho
skinparam classAttributeIconSize 0
hide circle
' Gruppierungen
package "Systemweite Benutzer und Rollen" {
class User {
+username
+email
+isAdmin
}
note right of User
Kann Organisationen erstellen
Kann eigenen Namespace verwalten
Kann systemweiter Admin sein
end note
}
package "Organisation" {
class Organisation {
+name
+visibility
}
class Team {
+name
+permissionLevel
+canCreateRepos
}
class OrgMember {
+role: member / owner
}
Organisation "1" -- "0..*" Team : verwaltet >
Organisation "1" -- "0..*" OrgMember : hat Mitglieder >
User "1" -- "0..*" OrgMember : ist >
OrgMember "1" -- "0..*" Team : gehört zu >
}
package "Repository" {
class Repository {
+name
+visibility
+owner: User|Organisation
}
Team "1" -- "0..*" Repository : Zugriff auf >
User "1" -- "0..*" Repository : direkte Rechte (optional) >
}
@enduml

View file

@ -0,0 +1,31 @@
@startuml
skinparam defaultTextAlignment center
skinparam linetype ortho
start
:Neuer Nutzer registriert
oder eingeladen;
:Login am Forgejo-Server;
partition "Eigenes Nutzerkonto" {
:Optional: SSH-Key, Avatar, Bio;
:Optional: Eigenes Repo erstellen;
}
partition "Organisationen" {
:Neue Organisation erstellen;
:Team 'Owners' automatisch vorhanden;
:Weitere Teams erstellen;
:Bestehende Nutzer zu Teams hinzufügen;
}
partition "Repositories" {
:Repo in Organisation erstellen;
:Teams Berechtigungen auf Repos geben;
:Optional: Webhooks, Labels, Milestones;
}
stop
@enduml