The [SoC framework](SoCOverview.md) implements workflows that pass
[Proposals](ProposalModel.md), [Tasks](TaskModel.md), and other WorkItems from
one [user](UserModel.md) 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 [Google App Engine Datastore](http://code.google.com/appengine/docs/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 [Person entities](PersonModel.md).

## Contributor

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

## Reviewer

The Reviewer role is filled by a [Person](UserRoles#Person.md) who reviews the
work performed on Tasks done by a [Contributor](UserRoles#Contributor.md).  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 [Person](UserRoles#Person.md) 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 [Organizations](PersonGroups#Organisation.md) author the Tasks to be
completed by the students.

## Administrator

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

## Host

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

## Developer

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

This is not currently modeled in the [User Model](UserModel.md) (but may be, as a
new Property, in the future), but is instead managed via the
[Google AppEngine function](http://code.google.com/appengine/docs/users/adminusers.html)
`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_
[Creative Commons Attribution 2.5 License](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html).
[![](http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png)](http://creativecommons.org/licenses/by/2.5/)