Group

From cosmopool meta
Jump to navigation Jump to search

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

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

See also