{"_id":"54b54bf296fe3c0b00d38d2b","category":{"_id":"54b54bbf96fe3c0b00d38d2a","__v":9,"pages":["54b54bf296fe3c0b00d38d2b","54b56fb796fe3c0b00d38d61","54b576742d48f3350040e562","54b592342562600c00e05f2b","54b5926596fe3c0b00d38dbc","54b5938596fe3c0b00d38dc1","54b594722562600c00e05f2f","54c7a95e56f4ff0d00aaabe2","54caa9f7dd5cf30d00c35296"],"project":"54343170fa5527080064f449","version":"54343531bfaa3d0800c4d4af","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-01-13T16:45:51.860Z","from_sync":false,"order":6,"slug":"roles","title":"Roles"},"version":{"_id":"54343531bfaa3d0800c4d4af","project":"54343170fa5527080064f449","__v":28,"forked_from":"54343170fa5527080064f44c","createdAt":"2014-10-07T18:47:13.086Z","releaseDate":"2014-10-07T18:47:13.086Z","categories":["54343531bfaa3d0800c4d4b0","543435b1edce040800409240","543435b9edce040800409241","543435bcedce040800409243","543435bfedce040800409244","543435c2edce040800409245","54370cc426469424002a6dfa","54370cf026469424002a6dfd","5437129d26469424002a6e2f","543712d226469424002a6e30","5480c8fd74904f1a00053c86","54aafc6eefb39016009e4d71","54ac1d36de18cc1400226e01","54ad59369219922100751732","54b41bcf4f25cb1600518d2c","54b533a3a806f40c0050d53c","54b54bbf96fe3c0b00d38d2a","54b688a27379a90c00f53a8a","54b699efbc1a46160005edfa","54b8191691011f0b00068804","54bfb002d03bfc0d0000e814","54bfb33ed03bfc0d0000e816","55a3e94e912a6e2300882cdb","55a56c370f354f0d00fd02a8","55e85ad034516037002e9325","5638ecb62fc5520d001a4cf9","572cba2fc310640e008f63d5","596e6e42c5b53b00509791b1"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"3.0.0","version":"3.0"},"parentDoc":null,"project":"54343170fa5527080064f449","user":"543532513513400800a144f4","__v":8,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-01-13T16:46:42.244Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":0,"body":"MediaSilo's authorization scope has two layers: the account and a project. A user will have some permissions across an entire MediaSilo account, and will also have permissions scoped to specific projects. We do this to support delegating the management of projects to teams or individuals without exposing authorization to account level resources. Essentially, we allow you to create a contained workspace that cannot affect the account itself.\n\nTo support these two layers we have two types of permissions objects: Account Level Roles and Role Templates. Account roles are assigned to a user, and exist across the entire account. Role templates are collections of permissions. They can be assigned to a specific user to define what the user can do within a specific project. We call them templates because they describe a set of permissions that can be prescribed to users resulting in the creation of actual roles.\n\nNOTE:\n\n  * If a user is granted a role within a project, the MediaSilo system will not look any further for the users permissions. This means that if a role grants a user permission to upload assets within an account role but if project role denies it then the users will not be able to upload assets in the respective project.\n\n  * We allow you to assign a default role template to a user to avoid having to explicitly assign a specific role when they are added to a project. The default role template will be automatically assigned to a user each time they are added to a project if no other role is specified.\n  \n  * Roles cannot be modified, only Role Templates can. Every new account in MediaSilo is scaffolded with core roles that are immutable.\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Each role has a collection of permission groups that contain a list of permissions that pertain to the respective group. The groups are related to specific workflows within MediaSilo:\\n\\n  * The ASSET group describes the permissions related to working with files managed in MediaSilo. \\n  * The COLLABORATION group describes the permissions that are related to how you can work with others on given assets\\n  * The SHARING group describes where assets can be sent\\n  * The REPORTING group describes what data can be exported from MediaSilo\\n  * The SERVICE group describes what external services are permissible. Currently, transcription is the only service in this group.\",\n  \"title\": \"Permission Groups\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Role Templates\"\n}\n[/block]\nBelow is an example of what a Role Template looks like\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n    \\\"id\\\": \\\"54208878e4b05c1a34c2e0cd\\\",\\n    \\\"displayName\\\": \\\"Editor\\\",\\n    \\\"description\\\": \\\"Any user responsible for editing assets\\\",\\n    \\\"permissionGroups\\\": [\\n        {\\n            \\\"displayName\\\": \\\"ASSET\\\",\\n            \\\"groupIdentifier\\\": \\\"ASSET\\\",\\n            \\\"permissions\\\": [\\n                \\\"CREATE\\\",\\n                \\\"DELETE\\\",\\n                \\\"SOURCE\\\",\\n                \\\"READ\\\",\\n                \\\"UPDATE\\\"\\n            ]\\n        },\\n        {\\n            \\\"displayName\\\": \\\"COLLABORATION\\\",\\n            \\\"groupIdentifier\\\": \\\"COLLABORATION\\\",\\n            \\\"permissions\\\": [\\n                \\\"REQUESTAPPROVAL\\\",\\n                \\\"RATE\\\",\\n                \\\"COMMENT\\\"\\n            ]\\n        },\\n        {\\n            \\\"displayName\\\": \\\"SHARING\\\",\\n            \\\"groupIdentifier\\\": \\\"SHARING\\\",\\n            \\\"permissions\\\": [\\n                \\\"INTERNAL\\\",\\n                \\\"EXTERNAL\\\"\\n            ]\\n        }\\n    ]\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Name\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"displayName\",\n    \"0-1\": \"This is the name that will be show in the MediaSilo application\",\n    \"1-0\": \"description\",\n    \"1-1\": \"For roles in particular, description are important. Often times, the name cannot fully describe the permissions that are being granted within a given role\",\n    \"2-0\": \"permissionGroups\",\n    \"2-1\": \"A collection of permission definitions\"\n  },\n  \"cols\": 2,\n  \"rows\": 3\n}\n[/block]","excerpt":"","slug":"overview-7","type":"basic","title":"Overview"}
MediaSilo's authorization scope has two layers: the account and a project. A user will have some permissions across an entire MediaSilo account, and will also have permissions scoped to specific projects. We do this to support delegating the management of projects to teams or individuals without exposing authorization to account level resources. Essentially, we allow you to create a contained workspace that cannot affect the account itself. To support these two layers we have two types of permissions objects: Account Level Roles and Role Templates. Account roles are assigned to a user, and exist across the entire account. Role templates are collections of permissions. They can be assigned to a specific user to define what the user can do within a specific project. We call them templates because they describe a set of permissions that can be prescribed to users resulting in the creation of actual roles. NOTE: * If a user is granted a role within a project, the MediaSilo system will not look any further for the users permissions. This means that if a role grants a user permission to upload assets within an account role but if project role denies it then the users will not be able to upload assets in the respective project. * We allow you to assign a default role template to a user to avoid having to explicitly assign a specific role when they are added to a project. The default role template will be automatically assigned to a user each time they are added to a project if no other role is specified. * Roles cannot be modified, only Role Templates can. Every new account in MediaSilo is scaffolded with core roles that are immutable. [block:callout] { "type": "info", "body": "Each role has a collection of permission groups that contain a list of permissions that pertain to the respective group. The groups are related to specific workflows within MediaSilo:\n\n * The ASSET group describes the permissions related to working with files managed in MediaSilo. \n * The COLLABORATION group describes the permissions that are related to how you can work with others on given assets\n * The SHARING group describes where assets can be sent\n * The REPORTING group describes what data can be exported from MediaSilo\n * The SERVICE group describes what external services are permissible. Currently, transcription is the only service in this group.", "title": "Permission Groups" } [/block] [block:api-header] { "type": "basic", "title": "Role Templates" } [/block] Below is an example of what a Role Template looks like [block:code] { "codes": [ { "code": "{\n \"id\": \"54208878e4b05c1a34c2e0cd\",\n \"displayName\": \"Editor\",\n \"description\": \"Any user responsible for editing assets\",\n \"permissionGroups\": [\n {\n \"displayName\": \"ASSET\",\n \"groupIdentifier\": \"ASSET\",\n \"permissions\": [\n \"CREATE\",\n \"DELETE\",\n \"SOURCE\",\n \"READ\",\n \"UPDATE\"\n ]\n },\n {\n \"displayName\": \"COLLABORATION\",\n \"groupIdentifier\": \"COLLABORATION\",\n \"permissions\": [\n \"REQUESTAPPROVAL\",\n \"RATE\",\n \"COMMENT\"\n ]\n },\n {\n \"displayName\": \"SHARING\",\n \"groupIdentifier\": \"SHARING\",\n \"permissions\": [\n \"INTERNAL\",\n \"EXTERNAL\"\n ]\n }\n ]\n}", "language": "json" } ] } [/block] [block:parameters] { "data": { "h-0": "Name", "h-1": "Description", "0-0": "displayName", "0-1": "This is the name that will be show in the MediaSilo application", "1-0": "description", "1-1": "For roles in particular, description are important. Often times, the name cannot fully describe the permissions that are being granted within a given role", "2-0": "permissionGroups", "2-1": "A collection of permission definitions" }, "cols": 2, "rows": 3 } [/block]