Compare commits
1 commit
main
...
developmen
Author | SHA1 | Date | |
---|---|---|---|
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:
|
||||
|
||||
---
|
||||
|
|
|
@ -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
|
||||
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
|
||||
|
|
|
@ -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