feat(forgejo): added readable markdown for the repo-org model of forgejo
This commit is contained in:
parent
19c30cfa51
commit
0b057afe0d
10 changed files with 121 additions and 100 deletions
Binary file not shown.
After Width: | Height: | Size: 158 KiB |
Binary file not shown.
After Width: | Height: | Size: 120 KiB |
Binary file not shown.
After Width: | Height: | Size: 227 KiB |
Binary file not shown.
After Width: | Height: | Size: 166 KiB |
|
@ -1,3 +1,23 @@
|
||||||
|
|
||||||
|
# Forgejo's entities' relations repo, organisation, team, user
|
||||||
|
|
||||||
|
## small: only one comment
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## normal model
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## large
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## large packaged
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
Das `owners`-Team in Gitea/Forgejo ist **etwas Besonderes** und tatsächlich **hardcoded** – hier sind die Details:
|
Das `owners`-Team in Gitea/Forgejo ist **etwas Besonderes** und tatsächlich **hardcoded** – hier sind die Details:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
@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
|
|
|
@ -1,62 +1,58 @@
|
||||||
@startuml
|
@startuml
|
||||||
left to right direction
|
scale 500 width
|
||||||
skinparam linetype ortho
|
package "Forgejo/Gitea User-Organisation-Repo-Modell" {
|
||||||
skinparam classAttributeIconSize 0
|
|
||||||
hide circle
|
|
||||||
|
|
||||||
' Gruppierungen
|
|
||||||
package "Systemweite Benutzer und Rollen" {
|
|
||||||
class User {
|
class User {
|
||||||
+username
|
+ id: int
|
||||||
+email
|
+ username: string
|
||||||
+isAdmin
|
+ email: string
|
||||||
}
|
}
|
||||||
|
|
||||||
note right of User
|
|
||||||
Kann Organisationen erstellen
|
|
||||||
Kann eigenen Namespace verwalten
|
|
||||||
Kann systemweiter Admin sein
|
|
||||||
end note
|
|
||||||
}
|
|
||||||
|
|
||||||
package "Organisation" {
|
|
||||||
class Organisation {
|
class Organisation {
|
||||||
+name
|
+ id: int
|
||||||
+visibility
|
+ name: string
|
||||||
}
|
|
||||||
|
|
||||||
class Team {
|
|
||||||
+name
|
|
||||||
+permissionLevel
|
|
||||||
+canCreateRepos
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class OrgMember {
|
class OrgMember {
|
||||||
+role: member / owner
|
+ user_id: int
|
||||||
|
+ org_id: int
|
||||||
|
+ is_owner: bool
|
||||||
|
+ role: string
|
||||||
}
|
}
|
||||||
|
|
||||||
Organisation "1" -- "0..*" Team : verwaltet >
|
class Team {
|
||||||
Organisation "1" -- "0..*" OrgMember : hat Mitglieder >
|
+ id: int
|
||||||
User "1" -- "0..*" OrgMember : ist >
|
+ org_id: int
|
||||||
|
+ name: string
|
||||||
OrgMember "1" -- "0..*" Team : gehört zu >
|
+ permission_level: string
|
||||||
}
|
}
|
||||||
|
|
||||||
package "Repository" {
|
|
||||||
class Repository {
|
class Repository {
|
||||||
+name
|
+ id: int
|
||||||
+visibility
|
+ owner_id: int
|
||||||
+owner: User|Organisation
|
+ name: string
|
||||||
|
+ is_private: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
Team "1" -- "0..*" Repository : Zugriff auf >
|
User "1" -- "0..*" OrgMember : membership
|
||||||
User "1" -- "0..*" Repository : direkte Rechte (optional) >
|
Organisation "1" -- "0..*" OrgMember : members
|
||||||
|
Organisation "1" -- "0..*" Team : teams
|
||||||
|
Team "1" -- "0..*" User : members
|
||||||
|
Team "1" -- "0..*" Repository : repos
|
||||||
|
|
||||||
note right of Repository
|
Organisation "1" -- "0..*" Repository : owns
|
||||||
Teams können nur auf Repositories zugreifen,
|
|
||||||
die zur selben Organisation gehören.
|
note right of OrgMember
|
||||||
Nutzer-Repos können nicht über Teams geteilt werden.
|
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
|
end note
|
||||||
}
|
}
|
||||||
|
|
||||||
@enduml
|
@enduml
|
||||||
|
|
|
@ -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
|
Loading…
Reference in a new issue