Index: openacs-4/packages/acs-core-docs/www/groups-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/groups-requirements.html,v diff -u -r1.6.2.7 -r1.6.2.8 --- openacs-4/packages/acs-core-docs/www/groups-requirements.html 29 Apr 2003 05:58:33 -0000 1.6.2.7 +++ openacs-4/packages/acs-core-docs/www/groups-requirements.html 7 May 2003 17:40:58 -0000 1.6.2.8 @@ -1,14 +1,14 @@ -OpenACS 4 Groups Requirements

OpenACS 4 Groups Requirements

+OpenACS 4 Groups Requirements

OpenACS 4 Groups Requirements

by Rafael H. Schloming, Mark Thomas
OpenACS docs are written by the named authors, and may be edited by OpenACS documentation staff. -

Introduction

Almost all database-backed websites have users, and need to model the +

Introduction

Almost all database-backed websites have users, and need to model the grouping of users. The OpenACS 4 Parties and Groups system is intended to provide the flexibility needed to model complex real-world organizational structures, particularly to support powerful subsite services; that is, where one OpenACS installation can support what appears to the user as distinct web services -for different user communities.

Vision Statement

A powerful web service that can meet the needs of large enterprises must +for different user communities.

Vision Statement

A powerful web service that can meet the needs of large enterprises must be able to model the the real world's very rich organizational structures and many ways of decomposing the same organization. For example, a corporation can be broken into structures (the corporation, its divisions, @@ -18,27 +18,27 @@ in a different sense) a particular office. OpenACS 4's Parties and Groups system will support such complex relations faithfully.

Historical Motivations

The primary limitation of the OpenACS 3.x user group system is that it restricts the application developer to representing a "flat group" -that contains only users: The user_groups table may contain the -group_id of a parent group, but parent-child relationship +that contains only users: The user_groups table may contain the +group_id of a parent group, but parent-child relationship support is limited because it only allows one kind of relationship between groups to be represented. Moreover, the Oracle database's limited support for tree-like structures makes the queries over these relationships expensive.

In addition, the Module Scoping design in OpenACS 3.0 introduced a party abstraction - a thing that is a person or a group of people - though not in the form of an explicit table. Rather, the triple of -scope, user_id, and group_id columns +scope, user_id, and group_id columns was used to identify the party. One disadvantage of this design convention is that it increases a data model's complexity by requiring the programmer to:

  • add these three columns to each "scoped" table

  • define a multi-column check constraint to protect against data corruption -(e.g., a row with a scope value of "group" but a null -group_id)

  • perform extra checks in Tcl and PL/SQL -functions and procedures to check both the user_id and -group_id values

In sum, the goal of the Parties and Groups system is to +(e.g., a row with a scope value of "group" but a null +group_id)

  • perform extra checks in Tcl and PL/SQL +functions and procedures to check both the user_id and +group_id values

  • In sum, the goal of the Parties and Groups system is to provide OpenACS programmers and site administrators with simple tools that fully describe the complex relationships that exist among groups in the real -world.

    User Scenarios

    Pat Developer has a client project and wants to model the company, its +world.

    User Scenarios

    Pat Developer has a client project and wants to model the company, its offices, its divisions, and its departments as groups and the employees as -users.

    System Overview

    We start with Groups, which contain members; the +users.

    System Overview

    We start with Groups, which contain members; the member can be either a person or another group (i.e. a member is a party).

    In addition to membership, the party and groups system defines a composition relationship that may exist between groups: A @@ -72,7 +72,7 @@ GC. For example, the system should be able to enforce a rule like: Do not allow a party P to become a member of GC unless P is already -a member of GP.

    Requirements: Data Model

    The data model for the parties and groups system must provide support for +a member of GP.

    Requirements: Data Model

    The data model for the parties and groups system must provide support for the following types of entities:

    10.0 Parties

    A party is an entity used to represent either a @@ -118,7 +118,7 @@ GP.

    60.10A group may be a component of multiple groups.

    60.20A group as a component of itself is not supported.

    60.30The data model must support component constraints.

    60.40The data model should support the subclassing of -composition via OpenACS Relationships.

    Requirements: API

    The API should let programmers accomplish the following tasks:

    70.10 Create a group +composition via OpenACS Relationships.

    Requirements: API

    The API should let programmers accomplish the following tasks:

    70.10 Create a group

    The parties and groups system provides a well defined API call that creates a new group by running the appropriate transactions on the parties @@ -219,7 +219,7 @@

    Since many SQL queries will check membership in a group as part of the -where clause, whatever mechanism is used to check membership in SQL -should be fairly small and simple.

    Requirements: User Interface

    The user interface is a set of HTML pages that are used to drive the +where clause, whatever mechanism is used to check membership in SQL +should be fairly small and simple.

    Requirements: User Interface

    The user interface is a set of HTML pages that are used to drive the underlying API. The user interface may provide the following functions:

    Revision History

    Document Revision #Action Taken, NotesWhen?By Whom?
    0.1Creation08/16/2000Rafael Schloming
    0.2Initial revision08/19/2000Mark Thomas
    0.3Edited and reviewed, conforms to requirements template08/23/2000Kai Wu
    0.4Further revised, added UI requirements08/24/2000Mark Thomas
    0.5Final edits, pending freeze08/24/2000Kai Wu
    0.6More revisions, added composition requirements08/30/2000Mark Thomas
    0.7More revisions, added composition requirements09/08/2000Mark Thomas
    View comments on this page at openacs.org
    +outlined in 130.x to 165.x

    Revision History

    Document Revision #Action Taken, NotesWhen?By Whom?
    0.1Creation08/16/2000Rafael Schloming
    0.2Initial revision08/19/2000Mark Thomas
    0.3Edited and reviewed, conforms to requirements template08/23/2000Kai Wu
    0.4Further revised, added UI requirements08/24/2000Mark Thomas
    0.5Final edits, pending freeze08/24/2000Kai Wu
    0.6More revisions, added composition requirements08/30/2000Mark Thomas
    0.7More revisions, added composition requirements09/08/2000Mark Thomas
    View comments on this page at openacs.org