Compare commits

...

1 commit

10 changed files with 121 additions and 100 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View file

@ -1,3 +1,23 @@
# Forgejo's entities' relations repo, organisation, team, user
## small: only one comment
![alt text](org-repo-user-small.png)
## normal model
![alt text](org-repo-user.png)
## large
![alt text](org-repo-user-large.png)
## large packaged
![alt text](org-repo-user-large-packaged.png)
Das `owners`-Team in Gitea/Forgejo ist **etwas Besonderes** und tatsächlich **hardcoded** hier sind die Details:
---

View file

@ -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

View file

@ -1,62 +1,58 @@
@startuml
left to right direction
skinparam linetype ortho
skinparam classAttributeIconSize 0
hide circle
scale 500 width
package "Forgejo/Gitea User-Organisation-Repo-Modell" {
' Gruppierungen
package "Systemweite Benutzer und Rollen" {
class User {
+username
+email
+isAdmin
+ id: int
+ username: string
+ email: string
}
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
+ id: int
+ name: string
}
class OrgMember {
+role: member / owner
+ user_id: int
+ org_id: int
+ is_owner: bool
+ role: string
}
Organisation "1" -- "0..*" Team : verwaltet >
Organisation "1" -- "0..*" OrgMember : hat Mitglieder >
User "1" -- "0..*" OrgMember : ist >
class Team {
+ id: int
+ org_id: int
+ name: string
+ permission_level: string
}
OrgMember "1" -- "0..*" Team : gehört zu >
}
package "Repository" {
class Repository {
+name
+visibility
+owner: User|Organisation
+ id: int
+ owner_id: int
+ name: string
+ is_private: bool
}
Team "1" -- "0..*" Repository : Zugriff auf >
User "1" -- "0..*" Repository : direkte Rechte (optional) >
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
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.
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