sandbox/ivideon/puml/Crowd/cl_folder.puml

540 lines
11 KiB
Text

@startuml Folder System Architecture
title Система папок/групп в Ivideon
package "Database" @startuml FolderSystemSimple
title Система папок в Ivideon
entity "folders" as folders_db {
* _id : ObjectId
--
* owner_id : string
* name : string
* parents : array
* objects : array
* root : boolean
}
entity "permission_grants" as grants_db {
* _id : ObjectId
--
* object_id : string
* object_type : string
* grantee_id : string
* permissions : array
}
entity "servers" as servers_db {
* _id : ObjectId
--
* owner_id : string
* cameras : object
}
entity "Folder" as folder_class {
+ get_objects(type)
+ add_object(obj)
+ remove_object(obj)
+ has_permissions(perm)
}
entity "FolderTree" as tree_class {
+ folders : dict
+ find_folders()
+ reload()
}
entity "Camera" as camera_node {
+ id : "server:index"
+ object_type : "camera"
}
folders_db ||--o{ folder_class
grants_db ||--o{ folder_class
servers_db ||--o{ camera_node
tree_class --> folder_class : manages
folder_class --> camera_node : contains
note right of folders_db
objects[] format:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note bottom of tree_class
Usage:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
@enduml
@startuml FolderSystemSimple
title Система папок в Ivideon
entity "folders" as folders_db {
* _id : ObjectId
--
* owner_id : string
* name : string
* parents : array
* objects : array
* root : boolean
}
entity "permission_grants" as grants_db {
* _id : ObjectId
--
* object_id : string
* object_type : string
* grantee_id : string
* permissions : array
}
entity "servers" as servers_db {
* _id : ObjectId
--
* owner_id : string
* cameras : object
}
entity "Folder" as folder_class {
+ get_objects(type)
+ add_object(obj)
+ remove_object(obj)
+ has_permissions(perm)
}
entity "FolderTree" as tree_class {
+ folders : dict
+ find_folders()
+ reload()
}
entity "Camera" as camera_node {
+ id : "server:index"
+ object_type : "camera"
}
folders_db ||--o{ folder_class
grants_db ||--o{ folder_class
servers_db ||--o{ camera_node
tree_class --> folder_class : manages
folder_class --> camera_node : contains
note right of folders_db
objects[] format:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note bottom of tree_class
Usage:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
@enduml
@startuml FolderSystemSimple
title Система папок в Ivideon
entity "folders" as folders_db {
* _id : ObjectId
--
* owner_id : string
* name : string
* parents : array
* objects : array
* root : boolean
}
entity "permission_grants" as grants_db {
* _id : ObjectId
--
* object_id : string
* object_type : string
* grantee_id : string
* permissions : array
}
entity "servers" as servers_db {
* _id : ObjectId
--
* owner_id : string
* cameras : object
}
entity "Folder" as folder_class {
+ get_objects(type)
+ add_object(obj)
+ remove_object(obj)
+ has_permissions(perm)
}
entity "FolderTree" as tree_class {
+ folders : dict
+ find_folders()
+ reload()
}
entity "Camera" as camera_node {
+ id : "server:index"
+ object_type : "camera"
}
folders_db ||--o{ folder_class
grants_db ||--o{ folder_class
servers_db ||--o{ camera_node
tree_class --> folder_class : manages
folder_class --> camera_node : contains
note right of folders_db
objects[] format:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note bottom of tree_class
Usage:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
@enduml
@startuml FolderSystemSimple
title Система папок в Ivideon
entity "folders" as folders_db {
* _id : ObjectId
--
* owner_id : string
* name : string
* parents : array
* objects : array
* root : boolean
}
entity "permission_grants" as grants_db {
* _id : ObjectId
--
* object_id : string
* object_type : string
* grantee_id : string
* permissions : array
}
entity "servers" as servers_db {
* _id : ObjectId
--
* owner_id : string
* cameras : object
}
entity "Folder" as folder_class {
+ get_objects(type)
+ add_object(obj)
+ remove_object(obj)
+ has_permissions(perm)
}
entity "FolderTree" as tree_class {
+ folders : dict
+ find_folders()
+ reload()
}
entity "Camera" as camera_node {
+ id : "server:index"
+ object_type : "camera"
}
folders_db ||--o{ folder_class
grants_db ||--o{ folder_class
servers_db ||--o{ camera_node
tree_class --> folder_class : manages
folder_class --> camera_node : contains
note right of folders_db
objects[] format:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note bottom of tree_class
Usage:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
@enduml
@startuml FolderSystemSimple
title Система папок в Ivideon
entity "folders" as folders_db {
* _id : ObjectId
--
* owner_id : string
* name : string
* parents : array
* objects : array
* root : boolean
}
entity "permission_grants" as grants_db {
* _id : ObjectId
--
* object_id : string
* object_type : string
* grantee_id : string
* permissions : array
}
entity "servers" as servers_db {
* _id : ObjectId
--
* owner_id : string
* cameras : object
}
entity "Folder" as folder_class {
+ get_objects(type)
+ add_object(obj)
+ remove_object(obj)
+ has_permissions(perm)
}
entity "FolderTree" as tree_class {
+ folders : dict
+ find_folders()
+ reload()
}
entity "Camera" as camera_node {
+ id : "server:index"
+ object_type : "camera"
}
folders_db ||--o{ folder_class
grants_db ||--o{ folder_class
servers_db ||--o{ camera_node
tree_class --> folder_class : manages
folder_class --> camera_node : contains
note right of folders_db
objects[] format:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note bottom of tree_class
Usage:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
@enduml
@startuml FolderSystemSimple
title Система папок в Ivideon
entity "folders" as folders_db {
* _id : ObjectId
--
* owner_id : string
* name : string
* parents : array
* objects : array
* root : boolean
}
entity "permission_grants" as grants_db {
* _id : ObjectId
--
* object_id : string
* object_type : string
* grantee_id : string
* permissions : array
}
entity "servers" as servers_db {
* _id : ObjectId
--
* owner_id : string
* cameras : object
}
entity "Folder" as folder_class {
+ get_objects(type)
+ add_object(obj)
+ remove_object(obj)
+ has_permissions(perm)
}
entity "FolderTree" as tree_class {
+ folders : dict
+ find_folders()
+ reload()
}
entity "Camera" as camera_node {
+ id : "server:index"
+ object_type : "camera"
}
folders_db ||--o{ folder_class
grants_db ||--o{ folder_class
servers_db ||--o{ camera_node
tree_class --> folder_class : manages
folder_class --> camera_node : contains
note right of folders_db
objects[] format:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note bottom of tree_class
Usage:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
@enduml
{
database folders_db as "folders collection"
database grants_db as "permission_grants"
database servers_db as "servers collection"
}
package "Folder Classes" {
class Folder {
+id: ObjectId
+owner_id: string
+name: string
+parents: List[string]
+objects: List[dict]
+root: boolean
--
+get_objects(type): List[string]
+add_object(obj)
+remove_object(obj)
+has_permissions(perm): boolean
}
class FolderTree {
+owner_id: string
+folders: Dict[id, Folder]
+objects: Dict[type, Dict[id, Node]]
+roots: List[Folder]
--
+find_folders(): List[Folder]
+reload()
}
class BaseNode {
+id: string
+owner_id: string
+grantee_id: string
+grants: Set[PermissionGrant]
--
+has_permissions(perm): boolean
+permissions: Tuple[string]
}
}
package "Permission System" {
class PermissionGrant {
+object_id: string
+object_type: string
+grantee_id: string
+permissions: List[string]
+shared_at: dict
}
}
package "Node Types" {
class Camera {
+id: "server:index"
+object_type: "camera"
}
}
' Relationships
Folder --|> BaseNode
FolderTree --> Folder : manages
Folder --> PermissionGrant : has grants
BaseNode --> PermissionGrant : uses
Folder --> folders_db : stored in
PermissionGrant --> grants_db : stored in
Camera --> servers_db : stored in
' Composition relationships
Folder --> Camera : "contains (objects[])"
Folder --> Folder : "contains subfolders"
note right of Folder
objects[] содержит:
[
{object_type: "camera",
object_id: "server:0"},
{object_type: "folder",
object_id: "subfolder_id"}
]
end note
note right of FolderTree
Главная точка доступа:
tree = FolderTree(user_id)
folder = tree.folders[folder_id]
cameras = folder.get_objects("camera")
end note
note left of PermissionGrant
Права доступа:
- admin (изменение)
- read (просмотр)
- Наследование по иерархии
end note
@enduml