Group
definition which evaluates to a set of users
Like a user a group is both a knowledge object and has functionality within the software. It is important for the membership relation and for determining access to objects.
A group is defined by a logical statement, which evaluates to a set of users: A statement defining a group can be composed of
- users
- other groups
The definition must not be cyclic. Therefore when changing a group definition G we have to make a list of all groups in the defining statement itself and recursively in all statements defining theses groups, and only if G is not in this list, then the change is valid. (The error message should also tell where the conflict appears.)
The statement defining a group uses set theoretic combinations (union, intersection, complement).
- Instead of complement we might use the difference A\B between two groups, which would ensure that the resulting set of users is not so big, if both A is not big; otherwise the resulting set of users will not be calculable, if there are millions of users at intermediate steps of the calculation. Then we also would have to handle the set of all users differently.
For reasons of performance we limit the maximum nesting level of groups to int MAX_GROUP_NESTING=10.
Syntax of a statement defining a group: define the BNF of a group definition (see perhaps BNF)
Table structure for group
- name
- set of names
- language
- set of languages corresponding to names
- definition
- statement defining the group
- decisionthreshold
- groups come in several types:
- owned by a user: decisionthreshold=-1
- consensual groups: changes pertaining to the group are only valid, if all members agree: decisionthreshold=1
- threshold groups: changes pertaining to the group are only valid, if a certain fraction of the members agrees: 0<=decisionthreshold<1 is this fraction