{"action":"opened","issue":{"url":"https://api.github.com/repos/lhermann/langify-docs/issues/11","repository_url":"https://api.github.com/repos/lhermann/langify-docs","labels_url":"https://api.github.com/repos/lhermann/langify-docs/issues/11/labels{/name}","comments_url":"https://api.github.com/repos/lhermann/langify-docs/issues/11/comments","events_url":"https://api.github.com/repos/lhermann/langify-docs/issues/11/events","html_url":"https://github.com/lhermann/langify-docs/issues/11","id":318314575,"number":11,"title":"Responsible entity","user":{"login":"dgilge","id":33256939,"avatar_url":"https://avatars0.githubusercontent.com/u/33256939?v=4","gravatar_id":"","url":"https://api.github.com/users/dgilge","html_url":"https://github.com/dgilge","followers_url":"https://api.github.com/users/dgilge/followers","following_url":"https://api.github.com/users/dgilge/following{/other_user}","gists_url":"https://api.github.com/users/dgilge/gists{/gist_id}","starred_url":"https://api.github.com/users/dgilge/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dgilge/subscriptions","organizations_url":"https://api.github.com/users/dgilge/orgs","repos_url":"https://api.github.com/users/dgilge/repos","events_url":"https://api.github.com/users/dgilge/events{/privacy}","received_events_url":"https://api.github.com/users/dgilge/received_events","type":"User","site_admin":false},"labels":[{"id":745450565,"url":"https://api.github.com/repos/lhermann/langify-docs/labels/question","name":"question","color":"cc317c","default":true}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-04-27T08:03:18Z","updated_at":"2018-04-27T08:03:18Z","closed_at":null,"author_association":"COLLABORATOR","body":"The responsible entity of a work can be an organization or a private person. I see two possible ways to implement it: Require a special *responsible entity* object (`Responsible`) for every work or make it optional and call it `Organization`.\r\n\r\nThe reasons to have this object are:\r\n\r\n1. to have a unique identifier to include in the URL (e.g. `/dgilge/xyz/` where *xyz* is the work)\r\n2. define the people who maintain the work, i.e. upload text to be translated, decide if they're private, make users trustees, etc.\r\n3. to decide which users may see and contribute to private works\r\n4. to decide which users are trustees (i.e. can do the final review and declare a translation as completed)\r\n\r\nHere is a comparison of the two options (*required* means always having a *responsible entity* object, *optional* means you could also do it without):\r\n\r\nReason | required | optional\r\n-----|----------|---------\r\nidentifier | `code` field in `Responsible` | `code` field in `Organization` or `username` field in `User`\r\nmaintainers | `staff` field in `Responsible` | `staff` field in `Organization` or `owner` field in `Work` (one person only, that way a user can still be an owner of an organization work, like on GitHub)\r\naccess private | `members` field in `Responsible` | `members` fields in `Organization` and `Work` or permission groups (you optionally could invite users per work*)\r\ntrustees | `trustees` field in `Responsible` | `trustees` fields in `Organization` and `Work` or permission groups (you optionally could decide per work who the trustees are*)\r\n\r\n\\* = I think this actually is quite handy\r\n\r\n(I'm not sure whether to use Django permissions which are more bound to the user by design and maybe more flexible or implement direct relations to the users which might be clearer from a `Work` perspective. But this issue isn't as important as the above.)"}}
{"actor":{"display_login":"dgilge"}}