#summary Overview of the various user roles in Melange
#labels Phase-Requirements,Contents-Draft

The [SoCOverview SoC framework] implements workflows that pass
[ProposalModel Proposals], [TaskModel Tasks], and other WorkItems from
one [UserModel user] to another.  These users can serve in one or more
roles, and these roles define which RoleViews and WorkViews the user
is able to see and interact with.

Each role is represented in the [http://code.google.com/appengine/docs/datastore/ Google App Engine Datastore] by an entity model.  RoleModels summarizes the relationships between these models.

== Person ==

The Person role is a basic role from which all other user roles derive.  This
role is represented in the [http://code.google.com/appengine/docs/datastore/
Datastore] by [PersonModel Person entities].

== Contributor ==

The Contributor role is filled by a [UserRoles#Person Person] who contributes
progress on Tasks to a [UserRoles#Reviewer Reviewer].  In Google Summer of
Code, for example, an accepted student would be considered a Contributor.

== Reviewer ==

The Reviewer role is filled by a [UserRoles#Person Person] who reviews the
work performed on Tasks done by a [UserRoles#Contributor Contributor].  Again,
in Google Summer of Code, a mentor with an assigned, accepted student would be
considered a Reviewer.

== Author ==

The Author role is filled by a [UserRoles#Person Person] who creates (or
"authors") Tasks for a Program.  In Google Summer of Code, students who create
applications to be reviewed for acceptance into the program are Authors.
Contrast this with Google Highly Open Participation, where representatives of
participating [PersonGroups#Organisation Organizations] author the Tasks to be
completed by the students.

== Administrator ==

The Administrator role is filled by a [UserRoles#Person Person] who:
  * submits an [PersonGroups#Organization Organization] for participation in a Program
  * approves [UserRoles#Reviewer Reviewers] for that [PersonGroups#Organization Organization]

== Host ==

The Host role is filled by a [UserRoles#Person Person] who:
  * manages the overall Program for a [PersonGroups#Sponsor Sponsor]
  * approves [PersonGroups#Organization Organizations] for participation in a Program

----
_Copyright 2008 Google Inc._
_This work is licensed under a_
[http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License].
[http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png]
