#summary Various user roles in Melange
#labels Phase-Requirements,Contents-Draft,Importance-Details

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

== Developer ==

The Developer role is the Melange super-admin, who:
  * manages the application deployment
  * must create the [PersonGroups#Sponsor Sponsor] and [UserRoles#Host Host]

This is not currently modeled in the [UserModel User Model] (but may be, as a
new Property, in the future), but is instead managed via the
[http://code.google.com/appengine/docs/users/adminusers.html Google AppEngine function]
`users.is_current_user_admin()`.
This solves the "chicken-and-egg" problem about how any "super-user" entities
in the Melange application get created if there are no existing such entities.

----
_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]