infinito/documentation/product/system/requirements.md
2018-09-13 14:39:03 +02:00

138 lines
3.1 KiB
Markdown

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
“SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be
interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119).
"entity" or "entities" are to be interpreted as [Doctrine Objects](https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html).
**Bold** words define a unique type.
# requiremts
## interfaces
The application MUST contain the following interfaces:
* HTML
* JSON
## actors
### user
The application MUST provide the following functions:
* delete user
* register user
* modify user
* create user (child)
* login
* logout
A **user** MUST have one **node**.
A **user** MUST be a **source**.
### law
A **law** MUST belong exclusive to a **node**.
A **law** MUST contain one of each of **right** types one time.
#### right
A **right** MUST NOT be a **source**.
A **right** MUST belong to a **law**.
A **right** MUST be of one of the following types:
* read
* write
* administrate
#### permission
A **permission** MAY have a father from which it inherit.
A **permission** MUST belong to a **right**.
A **permission** MUST allow blacklisting.
A **permission** MUST allow whitelisting.
A **permission** MUST allow that it applies to the parent **relative collection** s of the rule set.
A **permission** MUST allow that it applies to the child **relative collection** s of the rule set.
A **permission** MUST contain a **collection** on which the rule set applies.
### node
A **node** MUST have one **source**.
A **node** MUST contain a parent **relative collection**.
A **node** MUST contain a children **relative collection**.
A **node** MAY be a member of one or more **relative collection** s.
A **node** MAY be a member of one or more **collection** entity.
A **node** MUST have a **law**.
A **node** MUST have a **history**.
#### relative collection
A **relative collection** MUST belong to a **node**.
A **relative collection** MUST contain **node** s.
A **relative collection** MUST provide the following functions:
* get all relatives
* get specific relative
* get relatives
* get relatives of generation
### source
A **source** MUST have one node.
A **source** MUST be an entity.
A **source** MUST contain a file fabric.
#### entities
Sources MUST be on of the following entities:
entity|attributes
--- | ---
user|username,password,identity
identity|names,addresses
address|
date|datetime
name|string
birthday|date
death|date
text|text(varchar)
collection|nodes
live|birthday,death
#### file
A **file** MUST be on of the following types:
* HTML
* JSON
* XML
* TEXT
* CSV
* JPG
* MD
It SHOULD be possible to export a **file** to one or more other **file** s.
It MUST be possible to edit a **file**.
IT MUST be possible to save a **file**.
#### collection
A **source** MAY contain other **nodes**.
### history
A **history** MUST log all of the actions which happen to a **node**.
A **history** MUST exclusive belong to a **node**.
A **history** MUST allow to give the state of a **node** of a special date back.