| 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://creativecommons.org/licenses/by/2.5/) |