{"action":"created","issue":{"url":"https://api.github.com/repos/SUSE/Portus/issues/29","labels_url":"https://api.github.com/repos/SUSE/Portus/issues/29/labels{/name}","comments_url":"https://api.github.com/repos/SUSE/Portus/issues/29/comments","events_url":"https://api.github.com/repos/SUSE/Portus/issues/29/events","html_url":"https://github.com/SUSE/Portus/pull/29","id":71916475,"number":29,"title":"Team roles","user":{"login":"flavio","id":22728,"avatar_url":"https://avatars.githubusercontent.com/u/22728?v=3","gravatar_id":"","url":"https://api.github.com/users/flavio","html_url":"https://github.com/flavio","followers_url":"https://api.github.com/users/flavio/followers","following_url":"https://api.github.com/users/flavio/following{/other_user}","gists_url":"https://api.github.com/users/flavio/gists{/gist_id}","starred_url":"https://api.github.com/users/flavio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flavio/subscriptions","organizations_url":"https://api.github.com/users/flavio/orgs","repos_url":"https://api.github.com/users/flavio/repos","events_url":"https://api.github.com/users/flavio/events{/privacy}","received_events_url":"https://api.github.com/users/flavio/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/SUSE/Portus/milestones/1","html_url":"https://github.com/SUSE/Portus/milestones/Teams%20&%20Roles","labels_url":"https://api.github.com/repos/SUSE/Portus/milestones/1/labels","id":1087856,"number":1,"title":"Teams & Roles","description":"Portus needs to implement the concept of Teams and Roles. \r\n\r\nA Team is defined as a cherry picked subset of users, to which one or more namespaces will belong to. \r\nThe type of access granted to those namespaces will be defined by the Role assigned to each Team member, and will be consistent across all namespaces owned by the Team.  \r\n\r\nEach user must be able to have one or multiple roles, defined as such:\r\n\r\n*Owner*\r\nThis is the default and unchangeable role for the the own namespace. This Role will also be inherited by the Team creator on the Team namespace(s), and can be granted to other Team members.\r\n- Has RW  rights on the namespace\r\n- Has access to the Team management:\r\n      - Who's part of the team\r\n      - Which Role each team member has within the team\r\n\r\nWhile a user must keep his Owner Role for the private namespace, the ownership of a team and its namespace can be dropped, as long as another Owner for the same Team exists. \r\nAs you can't have a Team without an Owner, the Owner of a team can either delegate the Ownership to other Team members or delete the Team.   \r\n\r\n*Contributor*\r\n  - Has RW rights on the namespace\r\n\r\n*Viewer*\r\n  - Has RO access to the namespace.\r\n\r\nSeparated from those roles, there must be a possibility of marking non personal namespaces as public. This will be presented to the Owner of the namespace in form of a checkbox, deactivated by default. \r\nBy marking the checkbox, anyone registered as a Portus user, but not part of the Team will have RO access to the namespace, maintaining the validity of the previously defined Roles within the team. The checkbox can be deselected by the Owner at anytime. \r\n","creator":{"login":"eotchi","id":576621,"avatar_url":"https://avatars.githubusercontent.com/u/576621?v=3","gravatar_id":"","url":"https://api.github.com/users/eotchi","html_url":"https://github.com/eotchi","followers_url":"https://api.github.com/users/eotchi/followers","following_url":"https://api.github.com/users/eotchi/following{/other_user}","gists_url":"https://api.github.com/users/eotchi/gists{/gist_id}","starred_url":"https://api.github.com/users/eotchi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eotchi/subscriptions","organizations_url":"https://api.github.com/users/eotchi/orgs","repos_url":"https://api.github.com/users/eotchi/repos","events_url":"https://api.github.com/users/eotchi/events{/privacy}","received_events_url":"https://api.github.com/users/eotchi/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":0,"state":"open","created_at":"2015-04-28T17:02:30Z","updated_at":"2015-04-29T16:05:35Z","due_on":null,"closed_at":null},"comments":4,"created_at":"2015-04-29T16:03:33Z","updated_at":"2015-04-29T17:07:15Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/SUSE/Portus/pulls/29","html_url":"https://github.com/SUSE/Portus/pull/29","diff_url":"https://github.com/SUSE/Portus/pull/29.diff","patch_url":"https://github.com/SUSE/Portus/pull/29.patch"},"body":"This PR introduces the concept of user roles within a team, as requested by the 1st milestone (see issue #16).\r\n\r\nA team can have three types of users:\r\n  * viewers: RO access\r\n  * contributors: RW access\r\n  * owners: like contributors, but have also access to the admin panel of the team"},"comment":{"url":"https://api.github.com/repos/SUSE/Portus/issues/comments/97506114","html_url":"https://github.com/SUSE/Portus/pull/29#issuecomment-97506114","issue_url":"https://api.github.com/repos/SUSE/Portus/issues/29","id":97506114,"user":{"login":"mssola","id":767943,"avatar_url":"https://avatars.githubusercontent.com/u/767943?v=3","gravatar_id":"","url":"https://api.github.com/users/mssola","html_url":"https://github.com/mssola","followers_url":"https://api.github.com/users/mssola/followers","following_url":"https://api.github.com/users/mssola/following{/other_user}","gists_url":"https://api.github.com/users/mssola/gists{/gist_id}","starred_url":"https://api.github.com/users/mssola/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mssola/subscriptions","organizations_url":"https://api.github.com/users/mssola/orgs","repos_url":"https://api.github.com/users/mssola/repos","events_url":"https://api.github.com/users/mssola/events{/privacy}","received_events_url":"https://api.github.com/users/mssola/received_events","type":"User","site_admin":false},"created_at":"2015-04-29T17:07:15Z","updated_at":"2015-04-29T17:07:15Z","body":"Makes sense :+1: "}}