{"id":2378,"date":"2015-10-13T14:04:58","date_gmt":"2015-10-13T14:04:58","guid":{"rendered":"https:\/\/twproject.com\/support\/using-twproject\/security\/"},"modified":"2021-08-17T10:04:28","modified_gmt":"2021-08-17T10:04:28","slug":"security","status":"publish","type":"page","link":"https:\/\/twproject.com\/support\/using-twproject\/security\/","title":{"rendered":"Security"},"content":{"rendered":"<p>Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up.<\/p>\n<p>In order to understand Twproject\u2019s security, there are some key points that we will explain in this chapter.<\/p>\n<p>First of all, Twproject\u2019s security is <i>role based<\/i>; having a role means gaining permission for performing certain operations, for example creating project, inserting worklog, reading resources. We call this ability \u201cpermission\u201d; a role is a collection of permissions.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"margin-left: 0px; display: inline; margin-right: 0px; border: 0px;\" title=\"\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png\" alt=\"\" width=\"312\" height=\"52\" align=\"right\" border=\"0\" hspace=\"12\" \/>There are two kinds of roles, \u201clocal\u201d and \u201cglobal\u201d. Local roles have the scope of a project: this means that permissions work on the project where the role is set (through an assignment). Local roles are assigned to resources during the assignment phase; so when you assign a resource on a project as, for instance, project manager (that is a <i>local<\/i> role), you are giving the resource the set of permissions associated to the PM role.<\/p>\n<p>In this way you will create a really fine grained security structure, but with some limitations: setting local permission will not allow, for instance, a supervisor to read every data of your project without assign her\/him on every project, which would be a waste of time.<\/p>\n<p>In order to solve this kind of problems Twproject supports also \u201cglobal\u201d roles. A global role is a set of permissions that is directly associated to a resource, not through the mediation of an assignment. So if a user has a global role with \u201cproject read\u201d permission, she will read every project, bypassing assignments.<\/p>\n<p>This model is really refined and works well in most cases, but Twproject goes beyond that, and introduces a more sophisticated object called \u201carea\u201d. An area is a sort of \u201csandbox\u201d, and almost all Twproject\u2019 objects belong to one and exactly one area. Objects from different areas cannot \u201csee\u201d each other (with few exceptions), so for instance if you have two areas, \u201cproduction\u201d and \u201caccounting\u201d, you may have distinct, separate projects, roles, project types, etc. .<\/p>\n<p>Obviously having two <i>completely<\/i> separated areas may also be a problem, say for a single company, where probably some users should be cross-area. Twproject supports also this kind of solution, by allowing having on the same user global roles and assignments from different areas.<\/p>\n<p>Another interesting feature is security management delegation: in each area you may have a sort of sub-administrator, the \u201carea manager\u201d, that is responsible of new user creation and area administration.<\/p>\n<p>Setting up this kind of environment is simple but not trivial, we warmly suggest to avoid multi-area management until you have really understood Twproject\u2019 security model.<\/p>\n<p>Last point is how security works for tree-structured object (like project or resources); well by default security is <i>propagated<\/i> so if you have a permission on a project, you have the same permission on each descendant. This is the default behavior, but this setting is local to the node, so for instance Scrum based projects may have a different configuration (on Scrum a customer can add ToDos on the backlog, but cannot interfere with sprints, so permissions are not to be propagated in that case).<\/p>\n<p>Summing up how security works, we will examine an example of how Twproject answers this question: can user U add an ToDo on phase T1.1. Here the structure of the example:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"float: none; margin-left: auto; display: block; margin-right: auto; border: 0px;\" title=\"\" src=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/image.png\" alt=\"\" width=\"394\" height=\"115\" border=\"0\" \/><\/p>\n<p>The resource U is assigned on T1 with local role W(orker) that contains some permissions like project read, ToDo add\/read\/modify, and others. U has no global roles.<\/p>\n<p>This is the flow followed by Twproject in checking security, when a check is true the testing stops, otherwise the following clause is checked:<\/p>\n<p>1) Is the user owner of the project T1.1?<\/p>\n<p>2) Is the user an administrator?<\/p>\n<p>3) Has the user a global role in the same area of the project T1.1 containing the \u201cadd ToDo\u201d permission?<\/p>\n<p>4) Is U assigned to T1.1 with a role containing \u201cadd ToDo\u201d permission?<\/p>\n<p>5) Finally check if parent (T1) propagates permissions and child (T1.1) inherits. The answer is \u201cyes\u201d by default so it will check steps 1-4 with T1.1 parent T1.<\/p>\n<pre>Making this kind of test faster has been a really challenging project.<\/pre>\n<p>Security editors are really simple with respect to the security model \ud83d\ude42<\/p>\n<p>More about security:<br \/>\n\n<!-- Page-list plugin v.5.7 wordpress.org\/plugins\/page-list\/ -->\n<ul class=\"page-list subpages-page-list \">\n<li class=\"page_item page-item-2397\"><a href=\"https:\/\/twproject.com\/support\/using-twproject\/security\/roles\/\">Roles<\/a><\/li>\n<li class=\"page_item page-item-2391\"><a href=\"https:\/\/twproject.com\/support\/using-twproject\/security\/areas\/\">Areas<\/a><\/li>\n\n<\/ul><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to understand Twproject\u2019s security, there are some key points that we will explain in this chapter. First of all, Twproject\u2019s security is role based; having a role means gaining permission for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2210,"menu_order":51,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-2378","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Security | Twproject support<\/title>\n<meta name=\"description\" content=\"Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/twproject.com\/support\/using-twproject\/security\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Security | Twproject support\" \/>\n<meta property=\"og:description\" content=\"Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to\" \/>\n<meta property=\"og:url\" content=\"https:\/\/twproject.com\/support\/using-twproject\/security\/\" \/>\n<meta property=\"og:site_name\" content=\"Twproject support\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/twproject\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-17T10:04:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/\",\"url\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/\",\"name\":\"Security | Twproject support\",\"isPartOf\":{\"@id\":\"https:\/\/twproject.com\/support\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png\",\"datePublished\":\"2015-10-13T14:04:58+00:00\",\"dateModified\":\"2021-08-17T10:04:28+00:00\",\"description\":\"Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to\",\"breadcrumb\":{\"@id\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/twproject.com\/support\/using-twproject\/security\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/#primaryimage\",\"url\":\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png\",\"contentUrl\":\"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png\",\"width\":364,\"height\":51},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/twproject.com\/support\/using-twproject\/security\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/twproject.com\/support\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Twproject\",\"item\":\"https:\/\/twproject.com\/support\/using-twproject\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Security\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/twproject.com\/support\/#website\",\"url\":\"https:\/\/twproject.com\/support\/\",\"name\":\"Twproject support\",\"description\":\"Twproject documentation online\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/twproject.com\/support\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Security | Twproject support","description":"Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/twproject.com\/support\/using-twproject\/security\/","og_locale":"en_US","og_type":"article","og_title":"Security | Twproject support","og_description":"Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to","og_url":"https:\/\/twproject.com\/support\/using-twproject\/security\/","og_site_name":"Twproject support","article_publisher":"https:\/\/www.facebook.com\/twproject","article_modified_time":"2021-08-17T10:04:28+00:00","og_image":[{"url":"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png","type":"","width":"","height":""}],"twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/twproject.com\/support\/using-twproject\/security\/","url":"https:\/\/twproject.com\/support\/using-twproject\/security\/","name":"Security | Twproject support","isPartOf":{"@id":"https:\/\/twproject.com\/support\/#website"},"primaryImageOfPage":{"@id":"https:\/\/twproject.com\/support\/using-twproject\/security\/#primaryimage"},"image":{"@id":"https:\/\/twproject.com\/support\/using-twproject\/security\/#primaryimage"},"thumbnailUrl":"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png","datePublished":"2015-10-13T14:04:58+00:00","dateModified":"2021-08-17T10:04:28+00:00","description":"Twproject integrates a really fine grained security model without bothering too much neither the user nor the administrator for setting it up. In order to","breadcrumb":{"@id":"https:\/\/twproject.com\/support\/using-twproject\/security\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/twproject.com\/support\/using-twproject\/security\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/twproject.com\/support\/using-twproject\/security\/#primaryimage","url":"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png","contentUrl":"https:\/\/twproject.com\/support\/wp-content\/uploads\/2014\/01\/clip_image0032.png","width":364,"height":51},{"@type":"BreadcrumbList","@id":"https:\/\/twproject.com\/support\/using-twproject\/security\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/twproject.com\/support\/"},{"@type":"ListItem","position":2,"name":"Using Twproject","item":"https:\/\/twproject.com\/support\/using-twproject\/"},{"@type":"ListItem","position":3,"name":"Security"}]},{"@type":"WebSite","@id":"https:\/\/twproject.com\/support\/#website","url":"https:\/\/twproject.com\/support\/","name":"Twproject support","description":"Twproject documentation online","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/twproject.com\/support\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/pages\/2378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/comments?post=2378"}],"version-history":[{"count":0,"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/pages\/2378\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/pages\/2210"}],"wp:attachment":[{"href":"https:\/\/twproject.com\/support\/wp-json\/wp\/v2\/media?parent=2378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}