# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
define
attribute credential,
value string;
attribute full-name,
value string;
attribute id @abstract;
attribute email sub id,
value string;
attribute name sub id,
value string;
attribute number sub id,
value string;
attribute path sub id,
value string;
attribute object-type,
value string;
attribute ownership-type,
value string;
attribute parent-company-name,
value string;
attribute review-date,
value datetime;
attribute root-collection,
value boolean;
attribute size-kb,
value integer;
attribute validity,
value boolean;
relation access,
relates action,
relates object,
plays change-request:change,
plays permission:access;
relation change-request,
relates change,
relates requestee,
relates requester;
relation company-membership,
relates company,
relates member;
relation membership,
relates base-member,
relates base-parent;
relation collection-membership sub membership,
relates collection as base-parent,
relates member as base-member;
relation group-membership sub membership,
relates group as base-parent,
relates member as base-member;
relation set-membership sub membership,
relates member as base-member,
relates set as base-parent;
relation ownership,
relates base-owned,
relates base-owner;
relation group-ownership sub ownership,
owns ownership-type,
relates group as base-owned,
relates owner as base-owner;
relation object-ownership sub ownership,
owns ownership-type,
relates object as base-owned,
relates owner as base-owner;
relation permission,
owns review-date,
owns validity,
relates access,
relates subject,
plays permission-maximisation-violation:permission;
relation direct-permission sub permission;
relation inherited-permission sub permission;
relation segregation-policy,
owns name,
relates action @card(2..2),
plays segregation-violation:policy;
relation violation @abstract,
relates dummy_unused;
relation maximization-violation @abstract, sub violation;
relation group-maximisation-violation sub maximization-violation,
relates group;
relation permission-maximisation-violation sub maximization-violation,
relates permission;
relation segregation-violation sub violation,
relates object,
relates policy,
relates subject;
entity action @abstract,
owns name,
owns object-type @card(0..), # Is the card constraint correct?
owns parent-company-name,
plays access:action,
plays company-membership:member,
plays segregation-policy:action,
plays set-membership:member;
entity operation sub action;
entity operation-set sub action,
plays set-membership:set;
entity company,
owns name,
plays company-membership:company;
entity object @abstract,
owns object-type @card(0..),
owns parent-company-name ,
plays access:object,
plays collection-membership:member,
plays company-membership:member,
plays object-ownership:object,
plays segregation-violation:object;
entity resource @abstract, sub object;
entity file sub resource,
owns path,
owns size-kb;
entity interface sub resource,
owns name;
entity record sub resource,
owns number;
entity resource-collection @abstract, sub object,
owns root-collection,
plays collection-membership:collection;
entity application sub resource-collection,
owns name;
entity database sub resource-collection,
owns name;
entity directory sub resource-collection,
owns path,
owns size-kb;
entity table sub resource-collection,
owns name;
entity subject @abstract,
owns credential,
owns parent-company-name,
plays change-request:requestee,
plays change-request:requester,
plays company-membership:member,
plays group-membership:member,
plays group-ownership:owner,
plays object-ownership:owner,
plays permission:subject,
plays segregation-violation:subject;
entity user @abstract, sub subject;
entity person sub user,
owns email,
owns full-name;
entity user-group @abstract, sub subject,
plays group-maximisation-violation:group,
plays group-membership:group,
plays group-ownership:group;
entity business-unit sub user-group,
owns name;
entity user-account sub user-group,
owns email;
entity user-role sub user-group,
owns name;