<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pixelrefraction.com/index.php?action=history&amp;feed=atom&amp;title=RefractTrack_Permissions_and_Roles</id>
	<title>RefractTrack Permissions and Roles - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pixelrefraction.com/index.php?action=history&amp;feed=atom&amp;title=RefractTrack_Permissions_and_Roles"/>
	<link rel="alternate" type="text/html" href="https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;action=history"/>
	<updated>2026-09-16T20:44:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=155&amp;oldid=prev</id>
		<title>Nerdofepic at 23:00, 11 September 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=155&amp;oldid=prev"/>
		<updated>2026-09-11T23:00:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:00, 11 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Not everyone on a team needs (or should have) the same level of access. RefractTrack lets an admin control, in fine detail, exactly what each teammate can see and do — from full admins down to a playtester who can only submit bug reports.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Not everyone on a team needs (or should have) the same level of access. RefractTrack lets an admin control, in fine detail, exactly what each teammate can see and do — from full admins down to a playtester who can only submit bug reports.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:RefractTrack_Roles.png|border|center|700px|Roles are reusable permission presets you can apply to a teammate in one click.]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== What can be controlled ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== What can be controlled ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l32&quot;&gt;Line 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Managing columns, tags, and saved lists, on the other hand, is a broader, team-wide grant rather than something scoped per project — someone either can manage these across the board, or they can&amp;#039;t; it&amp;#039;s just which project&amp;#039;s columns or tags they happen to be looking at that changes from page to page.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Managing columns, tags, and saved lists, on the other hand, is a broader, team-wide grant rather than something scoped per project — someone either can manage these across the board, or they can&amp;#039;t; it&amp;#039;s just which project&amp;#039;s columns or tags they happen to be looking at that changes from page to page.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== You can&#039;t grant more than you have ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Nobody can hand out a permission they don&#039;t hold themselves — whether they&#039;re setting up a teammate&#039;s account or building a role preset — and nobody can change their own permissions, even if they&#039;d otherwise be allowed to manage everyone else&#039;s. Both are enforced automatically, not just hidden from view, so there&#039;s no way to accidentally (or deliberately) work around them from the account-editing screen.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Related pages ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Related pages ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Nerdofepic</name></author>
	</entry>
	<entry>
		<id>https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=125&amp;oldid=prev</id>
		<title>Nerdofepic at 03:36, 3 September 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=125&amp;oldid=prev"/>
		<updated>2026-09-03T03:36:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:36, 3 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l37&quot;&gt;Line 37:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[RefractTrack_Users|Users]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[RefractTrack_Users|Users]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[RefractTrack_Projects|Projects]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[RefractTrack_Projects|Projects]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:RefractTrack]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Nerdofepic</name></author>
	</entry>
	<entry>
		<id>https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=84&amp;oldid=prev</id>
		<title>Nerdofepic at 00:16, 29 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=84&amp;oldid=prev"/>
		<updated>2026-08-29T00:16:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;amp;diff=84&amp;amp;oldid=31&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Nerdofepic</name></author>
	</entry>
	<entry>
		<id>https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=31&amp;oldid=prev</id>
		<title>Nerdofepic: Created page with &quot;== Permissions and Roles ==  RefractTrack uses a full role-based access control (RBAC) system. There is no longer a fixed &quot;Member vs. Reporter&quot; split baked into the code — that distinction now exists only as a seeded, ordinary, fully-editable &#039;&#039;&#039;Reporter&#039;&#039;&#039; role preset, like any other role.  === Permission keys ===  &lt;code&gt;&lt;nowiki&gt;includes/permissions.php&lt;/nowiki&gt;&lt;/code&gt;&#039;s &lt;code&gt;&lt;nowiki&gt;PERMISSION_DEFS&lt;/nowiki&gt;&lt;/code&gt; is the single source of truth for every permission k...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.pixelrefraction.com/index.php?title=RefractTrack_Permissions_and_Roles&amp;diff=31&amp;oldid=prev"/>
		<updated>2026-08-27T23:28:42Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Permissions and Roles ==  RefractTrack uses a full role-based access control (RBAC) system. There is no longer a fixed &amp;quot;Member vs. Reporter&amp;quot; split baked into the code — that distinction now exists only as a seeded, ordinary, fully-editable &amp;#039;&amp;#039;&amp;#039;Reporter&amp;#039;&amp;#039;&amp;#039; role preset, like any other role.  === Permission keys ===  &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;includes/permissions.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;#039;s &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;PERMISSION_DEFS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; is the single source of truth for every permission k...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Permissions and Roles ==&lt;br /&gt;
&lt;br /&gt;
RefractTrack uses a full role-based access control (RBAC) system. There is no longer a fixed &amp;quot;Member vs. Reporter&amp;quot; split baked into the code — that distinction now exists only as a seeded, ordinary, fully-editable &amp;#039;&amp;#039;&amp;#039;Reporter&amp;#039;&amp;#039;&amp;#039; role preset, like any other role.&lt;br /&gt;
&lt;br /&gt;
=== Permission keys ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;includes/permissions.php&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;#039;s &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;PERMISSION_DEFS&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; is the single source of truth for every permission key that can exist. Adding a new permission is a code change, never a database migration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Category !! Key !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View tasks on the board or list&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:report&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Report tickets through the simplified reporter form&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create new tasks with full features&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:bulkcreate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Use the bulk task creation tool&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:edit:content&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit a task&amp;#039;s content (title, description, type, priority, groups)&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:edit:stage&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Move tasks between stages (also allows setting the assignee and due date)&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:review&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Approve, reject, or reset a task&amp;#039;s review status&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Permanently delete tasks&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:archive&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Archive or unarchive tasks&lt;br /&gt;
|-&lt;br /&gt;
| tasks || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:clone&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Clone existing tasks&lt;br /&gt;
|-&lt;br /&gt;
| comments || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;comments:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View comments on tasks&lt;br /&gt;
|-&lt;br /&gt;
| comments || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;comments:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Post comments on tasks&lt;br /&gt;
|-&lt;br /&gt;
| comments || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;comments:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit your own comments after posting (admins can edit anyone&amp;#039;s)&lt;br /&gt;
|-&lt;br /&gt;
| attachments || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attachments:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View attachments on tasks&lt;br /&gt;
|-&lt;br /&gt;
| attachments || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attachments:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Upload new attachments to tasks&lt;br /&gt;
|-&lt;br /&gt;
| attachments || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attachments:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Remove attachments from tasks&lt;br /&gt;
|-&lt;br /&gt;
| projects || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;projects:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View existing projects&lt;br /&gt;
|-&lt;br /&gt;
| projects || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;projects:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create new projects&lt;br /&gt;
|-&lt;br /&gt;
| projects || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;projects:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit existing projects&lt;br /&gt;
|-&lt;br /&gt;
| projects || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;projects:activate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Activate or deactivate projects&lt;br /&gt;
|-&lt;br /&gt;
| stages || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stages:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View existing stages&lt;br /&gt;
|-&lt;br /&gt;
| stages || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stages:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create new stages&lt;br /&gt;
|-&lt;br /&gt;
| stages || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stages:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit existing stages&lt;br /&gt;
|-&lt;br /&gt;
| stages || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stages:reorder&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Reorder stages&lt;br /&gt;
|-&lt;br /&gt;
| stages || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stages:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Delete stages&lt;br /&gt;
|-&lt;br /&gt;
| groups || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;groups:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View existing groups&lt;br /&gt;
|-&lt;br /&gt;
| groups || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;groups:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create new groups&lt;br /&gt;
|-&lt;br /&gt;
| groups || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;groups:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit existing groups&lt;br /&gt;
|-&lt;br /&gt;
| groups || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;groups:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Delete existing groups&lt;br /&gt;
|-&lt;br /&gt;
| lists || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lists:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View bulk-create saved lists&lt;br /&gt;
|-&lt;br /&gt;
| lists || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lists:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create bulk-create saved lists&lt;br /&gt;
|-&lt;br /&gt;
| lists || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lists:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit bulk-create saved lists&lt;br /&gt;
|-&lt;br /&gt;
| backups || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;backups:export&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Export a project as JSON or CSV&lt;br /&gt;
|-&lt;br /&gt;
| backups || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;backups:import&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Import a project from JSON or CSV&lt;br /&gt;
|-&lt;br /&gt;
| themes || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;themes:change&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Change the application&amp;#039;s color theme&lt;br /&gt;
|-&lt;br /&gt;
| themes || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;themes:brand&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Change the application&amp;#039;s name/branding&lt;br /&gt;
|-&lt;br /&gt;
| users || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View existing users&lt;br /&gt;
|-&lt;br /&gt;
| users || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create new users (including their permissions and projects)&lt;br /&gt;
|-&lt;br /&gt;
| users || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users:edit:contents&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit a user&amp;#039;s display name and password (usernames can&amp;#039;t be changed after creation)&lt;br /&gt;
|-&lt;br /&gt;
| users || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users:edit:permissions&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit the permissions granted to a user&lt;br /&gt;
|-&lt;br /&gt;
| users || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users:edit:projects&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit which projects a user has access to&lt;br /&gt;
|-&lt;br /&gt;
| users || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users:activate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Activate or deactivate users&lt;br /&gt;
|-&lt;br /&gt;
| roles || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;roles:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || View existing role presets&lt;br /&gt;
|-&lt;br /&gt;
| roles || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;roles:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Create new role presets&lt;br /&gt;
|-&lt;br /&gt;
| roles || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;roles:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Edit existing role presets&lt;br /&gt;
|-&lt;br /&gt;
| roles || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;roles:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || Delete role presets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Implied permissions ===&lt;br /&gt;
&lt;br /&gt;
Holding a more capable permission implies holding the corresponding &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; permission, so granting &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; also grants &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; without a separate step, and so on for essentially every noun/verb pair above. Two deliberate exceptions:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:report&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; implies nothing — it&amp;#039;s the stripped-down reporter flow, not real task visibility.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:bulkcreate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; additionally implies &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lists:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (it needs to &amp;#039;&amp;#039;read&amp;#039;&amp;#039; saved lists, not manage them), on top of the usual &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This is an explicit map, not something derived by pattern-matching the permission name, precisely to allow exceptions like these.&lt;br /&gt;
&lt;br /&gt;
=== Role presets ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;roles&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;role_permissions&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — named presets (e.g. &amp;quot;Reporter&amp;quot;), managed from Manage → Roles.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;roles.is_system = 1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; is reserved for the built-in &amp;#039;&amp;#039;&amp;#039;Admin&amp;#039;&amp;#039;&amp;#039; role.&lt;br /&gt;
* Applying a role preset to a user (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;apply_role_to_user()&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) is a &amp;#039;&amp;#039;&amp;#039;one-time copy&amp;#039;&amp;#039;&amp;#039; into that user&amp;#039;s own permission grants — not a live link. Editing a role afterward does not retroactively change users the preset was previously applied to.&lt;br /&gt;
&lt;br /&gt;
=== Per-user permissions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;user_permissions&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; is the actual, live source of truth for every non-admin user&amp;#039;s grants — independent of whatever role preset (if any) was used to seed them.&lt;br /&gt;
&lt;br /&gt;
=== Admin bypass ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;users.is_admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; is a bypass flag, not a materialized permission list. The core authorization check (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;user_can()&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) short-circuits to true for admins on every check, so a newly-added permission automatically applies to every admin user with no data migration needed.&lt;br /&gt;
&lt;br /&gt;
=== Project-scoped permissions ===&lt;br /&gt;
&lt;br /&gt;
Most permissions are additionally checked against &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;user_project_access&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — a user can hold a permission globally but still be denied for a specific project they lack access to:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Checked per-project (default-allow — granted globally unless a project access row restricts it):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:bulkcreate&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:edit:content&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:edit:stage&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:review&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:archive&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:clone&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;comments:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;comments:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;comments:edit&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attachments:view&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attachments:create&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;attachments:delete&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;backups:export&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;backups:import&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;backups:export&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;backups:import&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; are included here even though they&amp;#039;re not &amp;quot;task&amp;quot; permissions by category, because both operate on a project&amp;#039;s full task data wholesale — leaving them unscoped would let a restricted user route around the rest of the restriction by simply exporting (or importing into) a project they otherwise can&amp;#039;t see.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Checked per-project (default-deny — empty access means zero projects, not &amp;quot;everything&amp;quot;):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;tasks:report&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — preserving the historical reporter-form behavior where a reporter with no explicit project grants can&amp;#039;t submit anywhere.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Deliberately NOT project-scoped:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;stages:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;groups:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;lists:*&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, even though the underlying &amp;#039;&amp;#039;data&amp;#039;&amp;#039; they manage (stages, groups, saved lists) is itself project-owned. The ability to manage stages/groups/lists at all remains a global grant; only which project&amp;#039;s stages/groups/lists a user is looking at changes per page. This is intentional product precedent, not an oversight — see [[RefractTrack_Stages|Stages]] and [[RefractTrack_Groups|Groups]].&lt;br /&gt;
&lt;br /&gt;
=== Related pages ===&lt;br /&gt;
&lt;br /&gt;
* [[RefractTrack_Users|Users]]&lt;br /&gt;
* [[RefractTrack_Projects|Projects]]&lt;br /&gt;
* [[RefractTrack_Security|Security]]&lt;/div&gt;</summary>
		<author><name>Nerdofepic</name></author>
	</entry>
</feed>