Support edit permissions for mail rules and accounts

This commit is contained in:
shamoon 2023-09-22 01:01:35 -07:00
parent 54099d8441
commit 205106b566
8 changed files with 273 additions and 108 deletions

View File

@ -723,7 +723,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">691</context> <context context-type="linenumber">696</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2526035785704676448" datatype="html"> <trans-unit id="2526035785704676448" datatype="html">
@ -914,15 +914,15 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">370</context> <context context-type="linenumber">371</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">421</context> <context context-type="linenumber">423</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">455</context> <context context-type="linenumber">457</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context> <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
@ -1081,7 +1081,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">491</context> <context context-type="linenumber">493</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6457471243969293847" datatype="html"> <trans-unit id="6457471243969293847" datatype="html">
@ -1116,14 +1116,14 @@
<source>Create new item</source> <source>Create new item</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
<context context-type="linenumber">101</context> <context context-type="linenumber">109</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5324147361912094446" datatype="html"> <trans-unit id="5324147361912094446" datatype="html">
<source>Edit item</source> <source>Edit item</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/edit-dialog/edit-dialog.component.ts</context>
<context context-type="linenumber">105</context> <context context-type="linenumber">113</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7314814725704332646" datatype="html"> <trans-unit id="7314814725704332646" datatype="html">
@ -1172,6 +1172,14 @@
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">135</context> <context context-type="linenumber">135</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">346</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">384</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="7878445132438733225" datatype="html"> <trans-unit id="7878445132438733225" datatype="html">
<source>Create new user group</source> <source>Create new user group</source>
@ -1220,7 +1228,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">420</context> <context context-type="linenumber">422</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1431416938026210429" datatype="html"> <trans-unit id="1431416938026210429" datatype="html">
@ -1307,11 +1315,11 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">396</context> <context context-type="linenumber">398</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">482</context> <context context-type="linenumber">484</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context> <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
@ -1386,7 +1394,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">371</context> <context context-type="linenumber">372</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7046259383943324039" datatype="html"> <trans-unit id="7046259383943324039" datatype="html">
@ -1647,19 +1655,19 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">346</context> <context context-type="linenumber">347</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">383</context> <context context-type="linenumber">385</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">435</context> <context context-type="linenumber">437</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">470</context> <context context-type="linenumber">472</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2784260611081866636" datatype="html"> <trans-unit id="2784260611081866636" datatype="html">
@ -1881,11 +1889,11 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">422</context> <context context-type="linenumber">424</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">443</context> <context context-type="linenumber">445</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1436831433675346331" datatype="html"> <trans-unit id="1436831433675346331" datatype="html">
@ -2135,15 +2143,15 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">382</context> <context context-type="linenumber">383</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">434</context> <context context-type="linenumber">436</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">469</context> <context context-type="linenumber">471</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3728984448750213892" datatype="html"> <trans-unit id="3728984448750213892" datatype="html">
@ -2198,18 +2206,25 @@
<context context-type="linenumber">35</context> <context context-type="linenumber">35</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8105421668262723483" datatype="html"> <trans-unit id="7062872617520618723" datatype="html">
<source>Set Permissions</source> <source>Set permissions</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context>
<context context-type="linenumber">26</context> <context context-type="linenumber">26</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1678966148862835666" datatype="html">
<source>Edit permissions for </source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context>
<context context-type="linenumber">30</context>
</context-group>
</trans-unit>
<trans-unit id="8283439432608484491" datatype="html"> <trans-unit id="8283439432608484491" datatype="html">
<source>Note that permissions set here will override any existing permissions</source> <source>Note that permissions set here will override any existing permissions</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context> <context context-type="sourcefile">src/app/components/common/permissions-dialog/permissions-dialog.component.ts</context>
<context context-type="linenumber">43</context> <context context-type="linenumber">55</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5947558132119506443" datatype="html"> <trans-unit id="5947558132119506443" datatype="html">
@ -2241,7 +2256,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">408</context> <context context-type="linenumber">410</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8999708063434507268" datatype="html"> <trans-unit id="8999708063434507268" datatype="html">
@ -2778,15 +2793,15 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">372</context> <context context-type="linenumber">373</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">423</context> <context context-type="linenumber">425</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">458</context> <context context-type="linenumber">460</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context> <context context-type="sourcefile">src/app/components/manage/tasks/tasks.component.html</context>
@ -3183,19 +3198,19 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">796</context> <context context-type="linenumber">801</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">848</context> <context context-type="linenumber">853</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">907</context> <context context-type="linenumber">912</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">965</context> <context context-type="linenumber">970</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1181910457994920507" datatype="html"> <trans-unit id="1181910457994920507" datatype="html">
@ -3210,19 +3225,19 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">798</context> <context context-type="linenumber">803</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">850</context> <context context-type="linenumber">855</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">909</context> <context context-type="linenumber">914</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">967</context> <context context-type="linenumber">972</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5729001209753056399" datatype="html"> <trans-unit id="5729001209753056399" datatype="html">
@ -4345,6 +4360,10 @@
<context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context> <context context-type="sourcefile">src/app/components/manage/management-list/management-list.component.ts</context>
<context context-type="linenumber">300</context> <context context-type="linenumber">300</context>
</context-group> </context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">1010</context>
</context-group>
</trans-unit> </trans-unit>
<trans-unit id="1685061484835793745" datatype="html"> <trans-unit id="1685061484835793745" datatype="html">
<source>Start tour</source> <source>Start tour</source>
@ -4707,308 +4726,315 @@
<source>No mail accounts defined.</source> <source>No mail accounts defined.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">352</context> <context context-type="linenumber">353</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5364020217520256833" datatype="html"> <trans-unit id="5364020217520256833" datatype="html">
<source>Mail rules</source> <source>Mail rules</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">358</context> <context context-type="linenumber">359</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1372022816709469401" datatype="html"> <trans-unit id="1372022816709469401" datatype="html">
<source>Add Rule</source> <source>Add Rule</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">363</context> <context context-type="linenumber">364</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6751234988479444294" datatype="html"> <trans-unit id="6751234988479444294" datatype="html">
<source>No mail rules defined.</source> <source>No mail rules defined.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">389</context> <context context-type="linenumber">391</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8119815638230251386" datatype="html"> <trans-unit id="8119815638230251386" datatype="html">
<source>Users &amp; Groups</source> <source>Users &amp; Groups</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">403</context> <context context-type="linenumber">405</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2941198503117307737" datatype="html"> <trans-unit id="2941198503117307737" datatype="html">
<source>Add User</source> <source>Add User</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">413</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9124347207158517893" datatype="html"> <trans-unit id="9124347207158517893" datatype="html">
<source>Add Group</source> <source>Add Group</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.html</context>
<context context-type="linenumber">448</context> <context context-type="linenumber">450</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3066660568529853846" datatype="html"> <trans-unit id="3066660568529853846" datatype="html">
<source>Error retrieving groups</source> <source>Error retrieving groups</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">299</context> <context context-type="linenumber">304</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5241231471117657636" datatype="html"> <trans-unit id="5241231471117657636" datatype="html">
<source>Error retrieving mail rules</source> <source>Error retrieving mail rules</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">325</context> <context context-type="linenumber">328</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3178554336792037159" datatype="html"> <trans-unit id="3178554336792037159" datatype="html">
<source>Error retrieving mail accounts</source> <source>Error retrieving mail accounts</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">333</context> <context context-type="linenumber">336</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1235706724900303689" datatype="html"> <trans-unit id="1235706724900303689" datatype="html">
<source>Error retrieving users</source> <source>Error retrieving users</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">350</context> <context context-type="linenumber">354</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5610279464668232148" datatype="html"> <trans-unit id="5610279464668232148" datatype="html">
<source>Saved view &quot;<x id="PH" equiv-text="savedView.name"/>&quot; deleted.</source> <source>Saved view &quot;<x id="PH" equiv-text="savedView.name"/>&quot; deleted.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">553</context> <context context-type="linenumber">558</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3891152409365583719" datatype="html"> <trans-unit id="3891152409365583719" datatype="html">
<source>Settings saved</source> <source>Settings saved</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">675</context> <context context-type="linenumber">680</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7217000812750597833" datatype="html"> <trans-unit id="7217000812750597833" datatype="html">
<source>Settings were saved successfully.</source> <source>Settings were saved successfully.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">676</context> <context context-type="linenumber">681</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="525012668859298131" datatype="html"> <trans-unit id="525012668859298131" datatype="html">
<source>Settings were saved successfully. Reload is required to apply some changes.</source> <source>Settings were saved successfully. Reload is required to apply some changes.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">680</context> <context context-type="linenumber">685</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8491974984518503778" datatype="html"> <trans-unit id="8491974984518503778" datatype="html">
<source>Reload now</source> <source>Reload now</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">681</context> <context context-type="linenumber">686</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6839066544204061364" datatype="html"> <trans-unit id="6839066544204061364" datatype="html">
<source>Use system language</source> <source>Use system language</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">699</context> <context context-type="linenumber">704</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7729897675462249787" datatype="html"> <trans-unit id="7729897675462249787" datatype="html">
<source>Use date format of display language</source> <source>Use date format of display language</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">706</context> <context context-type="linenumber">711</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5260584511980773458" datatype="html"> <trans-unit id="5260584511980773458" datatype="html">
<source>Error while storing settings on server.</source> <source>Error while storing settings on server.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">726</context> <context context-type="linenumber">731</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4510369340305901516" datatype="html"> <trans-unit id="4510369340305901516" datatype="html">
<source>Password has been changed, you will be logged out momentarily.</source> <source>Password has been changed, you will be logged out momentarily.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">768</context> <context context-type="linenumber">773</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2753185112875184719" datatype="html"> <trans-unit id="2753185112875184719" datatype="html">
<source>Saved user &quot;<x id="PH" equiv-text="newUser.username"/>&quot;.</source> <source>Saved user &quot;<x id="PH" equiv-text="newUser.username"/>&quot;.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">775</context> <context context-type="linenumber">780</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3471101514724661554" datatype="html"> <trans-unit id="3471101514724661554" datatype="html">
<source>Error saving user.</source> <source>Error saving user.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">786</context> <context context-type="linenumber">791</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5565868288871970148" datatype="html"> <trans-unit id="5565868288871970148" datatype="html">
<source>Confirm delete user account</source> <source>Confirm delete user account</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">794</context> <context context-type="linenumber">799</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8133663925694885325" datatype="html"> <trans-unit id="8133663925694885325" datatype="html">
<source>This operation will permanently delete this user account.</source> <source>This operation will permanently delete this user account.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">795</context> <context context-type="linenumber">800</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="857903183180440990" datatype="html"> <trans-unit id="857903183180440990" datatype="html">
<source>Deleted user</source> <source>Deleted user</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">804</context> <context context-type="linenumber">809</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1942566571910298572" datatype="html"> <trans-unit id="1942566571910298572" datatype="html">
<source>Error deleting user.</source> <source>Error deleting user.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">811</context> <context context-type="linenumber">816</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5766640174051730159" datatype="html"> <trans-unit id="5766640174051730159" datatype="html">
<source>Saved group &quot;<x id="PH" equiv-text="newGroup.name"/>&quot;.</source> <source>Saved group &quot;<x id="PH" equiv-text="newGroup.name"/>&quot;.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">829</context> <context context-type="linenumber">834</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8382042988405122578" datatype="html"> <trans-unit id="8382042988405122578" datatype="html">
<source>Error saving group.</source> <source>Error saving group.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">838</context> <context context-type="linenumber">843</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6538873300613683004" datatype="html"> <trans-unit id="6538873300613683004" datatype="html">
<source>Confirm delete user group</source> <source>Confirm delete user group</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">846</context> <context context-type="linenumber">851</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7710984639498518244" datatype="html"> <trans-unit id="7710984639498518244" datatype="html">
<source>This operation will permanently delete this user group.</source> <source>This operation will permanently delete this user group.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">847</context> <context context-type="linenumber">852</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6834066329827670963" datatype="html"> <trans-unit id="6834066329827670963" datatype="html">
<source>Deleted group</source> <source>Deleted group</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">856</context> <context context-type="linenumber">861</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8850738980935204840" datatype="html"> <trans-unit id="8850738980935204840" datatype="html">
<source>Error deleting group.</source> <source>Error deleting group.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">863</context> <context context-type="linenumber">868</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6327501535846658797" datatype="html"> <trans-unit id="6327501535846658797" datatype="html">
<source>Saved account &quot;<x id="PH" equiv-text="newMailAccount.name"/>&quot;.</source> <source>Saved account &quot;<x id="PH" equiv-text="newMailAccount.name"/>&quot;.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">886</context> <context context-type="linenumber">891</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8067594003836508139" datatype="html"> <trans-unit id="8067594003836508139" datatype="html">
<source>Error saving account.</source> <source>Error saving account.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">897</context> <context context-type="linenumber">902</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5641934153807844674" datatype="html"> <trans-unit id="5641934153807844674" datatype="html">
<source>Confirm delete mail account</source> <source>Confirm delete mail account</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">905</context> <context context-type="linenumber">910</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="7176985344323395435" datatype="html"> <trans-unit id="7176985344323395435" datatype="html">
<source>This operation will permanently delete this mail account.</source> <source>This operation will permanently delete this mail account.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">906</context> <context context-type="linenumber">911</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4233826387148482123" datatype="html"> <trans-unit id="4233826387148482123" datatype="html">
<source>Deleted mail account</source> <source>Deleted mail account</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">915</context> <context context-type="linenumber">920</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6202503362522392111" datatype="html"> <trans-unit id="6202503362522392111" datatype="html">
<source>Error deleting mail account.</source> <source>Error deleting mail account.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">924</context> <context context-type="linenumber">929</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="123368655395433699" datatype="html"> <trans-unit id="123368655395433699" datatype="html">
<source>Saved rule &quot;<x id="PH" equiv-text="newMailRule.name"/>&quot;.</source> <source>Saved rule &quot;<x id="PH" equiv-text="newMailRule.name"/>&quot;.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">944</context> <context context-type="linenumber">949</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8951124554918814321" datatype="html"> <trans-unit id="8951124554918814321" datatype="html">
<source>Error saving rule.</source> <source>Error saving rule.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">955</context> <context context-type="linenumber">960</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="3896080636020672118" datatype="html"> <trans-unit id="3896080636020672118" datatype="html">
<source>Confirm delete mail rule</source> <source>Confirm delete mail rule</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">963</context> <context context-type="linenumber">968</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2250372580580310337" datatype="html"> <trans-unit id="2250372580580310337" datatype="html">
<source>This operation will permanently delete this mail rule.</source> <source>This operation will permanently delete this mail rule.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">964</context> <context context-type="linenumber">969</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="9077981247971516916" datatype="html"> <trans-unit id="9077981247971516916" datatype="html">
<source>Deleted mail rule</source> <source>Deleted mail rule</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">973</context> <context context-type="linenumber">978</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="2033194641751367552" datatype="html"> <trans-unit id="2033194641751367552" datatype="html">
<source>Error deleting mail rule.</source> <source>Error deleting mail rule.</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context> <context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">981</context> <context context-type="linenumber">986</context>
</context-group>
</trans-unit>
<trans-unit id="3061362835271417984" datatype="html">
<source>Permissions updated</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/manage/settings/settings.component.ts</context>
<context context-type="linenumber">1006</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="5101757640976222639" datatype="html"> <trans-unit id="5101757640976222639" datatype="html">

View File

@ -6,7 +6,7 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="row"> <div class="row">
<div class="col"> <div class="col-md-4">
<pngx-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></pngx-input-text> <pngx-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></pngx-input-text>
<pngx-input-select i18n-title title="Account" [items]="accounts" formControlName="account"></pngx-input-select> <pngx-input-select i18n-title title="Account" [items]="accounts" formControlName="account"></pngx-input-select>
<pngx-input-text i18n-title title="Folder" formControlName="folder" i18n-hint hint="Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." [error]="error?.folder"></pngx-input-text> <pngx-input-text i18n-title title="Folder" formControlName="folder" i18n-hint hint="Subfolders must be separated by a delimiter, often a dot ('.') or slash ('/'), but it varies by mail server." [error]="error?.folder"></pngx-input-text>
@ -15,7 +15,7 @@
<pngx-input-select i18n-title title="Consumption scope" [items]="consumptionScopeOptions" formControlName="consumption_scope" i18n-hint hint="See docs for .eml processing requirements"></pngx-input-select> <pngx-input-select i18n-title title="Consumption scope" [items]="consumptionScopeOptions" formControlName="consumption_scope" i18n-hint hint="See docs for .eml processing requirements"></pngx-input-select>
<pngx-input-number i18n-title title="Rule order" formControlName="order" [showAdd]="false" [error]="error?.order"></pngx-input-number> <pngx-input-number i18n-title title="Rule order" formControlName="order" [showAdd]="false" [error]="error?.order"></pngx-input-number>
</div> </div>
<div class="col"> <div class="col-md-4">
<p class="small" i18n>Paperless will only process mails that match <em>all</em> of the filters specified below.</p> <p class="small" i18n>Paperless will only process mails that match <em>all</em> of the filters specified below.</p>
<pngx-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></pngx-input-text> <pngx-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></pngx-input-text>
<pngx-input-text i18n-title title="Filter to" formControlName="filter_to" [error]="error?.filter_to"></pngx-input-text> <pngx-input-text i18n-title title="Filter to" formControlName="filter_to" [error]="error?.filter_to"></pngx-input-text>
@ -23,7 +23,7 @@
<pngx-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></pngx-input-text> <pngx-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></pngx-input-text>
<pngx-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" i18n-hint hint="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." [error]="error?.filter_attachment_filename"></pngx-input-text> <pngx-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" i18n-hint hint="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." [error]="error?.filter_attachment_filename"></pngx-input-text>
</div> </div>
<div class="col"> <div class="col-md-4">
<pngx-input-select i18n-title title="Action" [items]="actionOptions" formControlName="action" i18n-hint hint="Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched."></pngx-input-select> <pngx-input-select i18n-title title="Action" [items]="actionOptions" formControlName="action" i18n-hint hint="Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched."></pngx-input-select>
<pngx-input-text i18n-title title="Action parameter" *ngIf="showActionParamField" formControlName="action_parameter" [error]="error?.action_parameter"></pngx-input-text> <pngx-input-text i18n-title title="Action parameter" *ngIf="showActionParamField" formControlName="action_parameter" [error]="error?.action_parameter"></pngx-input-text>
<pngx-input-select i18n-title title="Assign title from" [items]="metadataTitleOptions" formControlName="assign_title_from"></pngx-input-select> <pngx-input-select i18n-title title="Assign title from" [items]="metadataTitleOptions" formControlName="assign_title_from"></pngx-input-select>

View File

@ -5,7 +5,7 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p class="mb-3" *ngIf="message" [innerHTML]="message | safeHtml"></p> <p *ngIf="!object && message" class="mb-3" [innerHTML]="message | safeHtml"></p>
<form [formGroup]="form"> <form [formGroup]="form">
<pngx-permissions-form [users]="users" formControlName="permissions_form"></pngx-permissions-form> <pngx-permissions-form [users]="users" formControlName="permissions_form"></pngx-permissions-form>

View File

@ -19,7 +19,7 @@ const set_permissions = {
users: [1], users: [1],
groups: [], groups: [],
}, },
edit: { change: {
users: [1], users: [1],
groups: [], groups: [],
}, },
@ -78,6 +78,10 @@ describe('PermissionsDialogComponent', () => {
}) })
it('should return permissions', () => { it('should return permissions', () => {
expect(component.permissions).toEqual({
owner: null,
set_permissions: null,
})
component.form.get('permissions_form').setValue(set_permissions) component.form.get('permissions_form').setValue(set_permissions)
expect(component.permissions).toEqual(set_permissions) expect(component.permissions).toEqual(set_permissions)
}) })
@ -87,4 +91,16 @@ describe('PermissionsDialogComponent', () => {
component.cancelClicked() component.cancelClicked()
expect(closeSpy).toHaveBeenCalled() expect(closeSpy).toHaveBeenCalled()
}) })
it('should support edit permissions on object', () => {
let obj = {
id: 1,
name: 'account1',
owner: set_permissions.owner,
permissions: set_permissions.set_permissions,
}
component.object = obj
expect(component.title).toEqual(`Edit permissions for ${obj.name}`)
expect(component.permissions).toEqual(set_permissions)
})
}) })

View File

@ -1,6 +1,7 @@
import { Component, EventEmitter, Input, Output } from '@angular/core' import { Component, EventEmitter, Input, Output } from '@angular/core'
import { FormControl, FormGroup } from '@angular/forms' import { FormControl, FormGroup } from '@angular/forms'
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { ObjectWithPermissions } from 'src/app/data/object-with-permissions'
import { PaperlessUser } from 'src/app/data/paperless-user' import { PaperlessUser } from 'src/app/data/paperless-user'
import { UserService } from 'src/app/services/rest/user.service' import { UserService } from 'src/app/services/rest/user.service'
@ -11,6 +12,7 @@ import { UserService } from 'src/app/services/rest/user.service'
}) })
export class PermissionsDialogComponent { export class PermissionsDialogComponent {
users: PaperlessUser[] users: PaperlessUser[]
private o: ObjectWithPermissions = undefined
constructor( constructor(
public activeModal: NgbActiveModal, public activeModal: NgbActiveModal,
@ -19,11 +21,24 @@ export class PermissionsDialogComponent {
this.userService.listAll().subscribe((r) => (this.users = r.results)) this.userService.listAll().subscribe((r) => (this.users = r.results))
} }
@Output()
public confirmClicked = new EventEmitter() public confirmClicked = new EventEmitter()
@Input() title = $localize`Set permissions`
title = $localize`Set Permissions`
set object(o: ObjectWithPermissions) {
this.o = o
this.title = $localize`Edit permissions for ` + o['name']
this.form.patchValue({
permissions_form: {
owner: o.owner,
set_permissions: o.permissions,
},
})
}
get object(): ObjectWithPermissions {
return this.o
}
form = new FormGroup({ form = new FormGroup({
permissions_form: new FormControl(), permissions_form: new FormControl(),
@ -39,7 +54,6 @@ export class PermissionsDialogComponent {
} }
} }
@Input()
message = $localize`Note that permissions set here will override any existing permissions` message = $localize`Note that permissions set here will override any existing permissions`
cancelClicked() { cancelClicked() {

View File

@ -343,6 +343,7 @@
<div class="col"> <div class="col">
<div class="btn-group"> <div class="btn-group">
<button *pngxIfPermissions="{ action: PermissionAction.Change, type: PermissionType.MailAccount }" [disabled]="!userCanEdit(account)" class="btn btn-sm btn-primary" type="button" (click)="editMailAccount(account)" i18n>Edit</button> <button *pngxIfPermissions="{ action: PermissionAction.Change, type: PermissionType.MailAccount }" [disabled]="!userCanEdit(account)" class="btn btn-sm btn-primary" type="button" (click)="editMailAccount(account)" i18n>Edit</button>
<button *pngxIfOwner="rule" class="btn btn-sm btn-primary" type="button" (click)="editPermissions(account)" i18n>Permissions</button>
<button *pngxIfPermissions="{ action: PermissionAction.Delete, type: PermissionType.MailAccount }" [disabled]="!userIsOwner(account)" class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailAccount(account)" i18n>Delete</button> <button *pngxIfPermissions="{ action: PermissionAction.Delete, type: PermissionType.MailAccount }" [disabled]="!userIsOwner(account)" class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailAccount(account)" i18n>Delete</button>
</div> </div>
</div> </div>
@ -380,6 +381,7 @@
<div class="col"> <div class="col">
<div class="btn-group"> <div class="btn-group">
<button *pngxIfPermissions="{ action: PermissionAction.Change, type: PermissionType.MailRule }" [disabled]="!userCanEdit(rule)" class="btn btn-sm btn-primary" type="button" (click)="editMailRule(rule)" i18n>Edit</button> <button *pngxIfPermissions="{ action: PermissionAction.Change, type: PermissionType.MailRule }" [disabled]="!userCanEdit(rule)" class="btn btn-sm btn-primary" type="button" (click)="editMailRule(rule)" i18n>Edit</button>
<button *pngxIfOwner="rule" class="btn btn-sm btn-primary" type="button" (click)="editPermissions(rule)" i18n>Permissions</button>
<button *pngxIfPermissions="{ action: PermissionAction.Delete, type: PermissionType.MailRule }" [disabled]="!userIsOwner(rule)" class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailRule(rule)" i18n>Delete</button> <button *pngxIfPermissions="{ action: PermissionAction.Delete, type: PermissionType.MailRule }" [disabled]="!userIsOwner(rule)" class="btn btn-sm btn-outline-danger" type="button" (click)="deleteMailRule(rule)" i18n>Delete</button>
</div> </div>
</div> </div>

View File

@ -52,6 +52,9 @@ import { TagsComponent } from '../../common/input/tags/tags.component'
import { TextComponent } from '../../common/input/text/text.component' import { TextComponent } from '../../common/input/text/text.component'
import { PageHeaderComponent } from '../../common/page-header/page-header.component' import { PageHeaderComponent } from '../../common/page-header/page-header.component'
import { SettingsComponent } from './settings.component' import { SettingsComponent } from './settings.component'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
import { PermissionsFormComponent } from '../../common/input/permissions/permissions-form/permissions-form.component'
import { IfOwnerDirective } from 'src/app/directives/if-owner.directive'
const savedViews = [ const savedViews = [
{ id: 1, name: 'view1' }, { id: 1, name: 'view1' },
@ -70,8 +73,8 @@ const mailAccounts = [
{ id: 2, name: 'account2' }, { id: 2, name: 'account2' },
] ]
const mailRules = [ const mailRules = [
{ id: 1, name: 'rule1', owner: 1 }, { id: 1, name: 'rule1', owner: 1, account: 1 },
{ id: 2, name: 'rule2', owner: 2 }, { id: 2, name: 'rule2', owner: 2, account: 2 },
] ]
describe('SettingsComponent', () => { describe('SettingsComponent', () => {
@ -110,6 +113,9 @@ describe('SettingsComponent', () => {
MailRuleEditDialogComponent, MailRuleEditDialogComponent,
PermissionsUserComponent, PermissionsUserComponent,
PermissionsGroupComponent, PermissionsGroupComponent,
IfOwnerDirective,
PermissionsDialogComponent,
PermissionsFormComponent,
], ],
providers: [CustomDatePipe, DatePipe, PermissionsGuard], providers: [CustomDatePipe, DatePipe, PermissionsGuard],
imports: [ imports: [
@ -591,4 +597,69 @@ describe('SettingsComponent', () => {
expect(listAllSpy).toHaveBeenCalled() expect(listAllSpy).toHaveBeenCalled()
expect(toastInfoSpy).toHaveBeenCalledWith('Deleted mail rule') expect(toastInfoSpy).toHaveBeenCalledWith('Deleted mail rule')
}) })
it('should support edit permissions on mail rule objects', () => {
completeSetup()
const perms = {
owner: 99,
set_permissions: {
view: {
users: [1],
groups: [2],
},
change: {
users: [3],
groups: [4],
},
},
}
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
const toastErrorSpy = jest.spyOn(toastService, 'showError')
const toastInfoSpy = jest.spyOn(toastService, 'showInfo')
const rulePatchSpy = jest.spyOn(mailRuleService, 'patch')
component.editPermissions(mailRules[0] as PaperlessMailRule)
expect(modal).not.toBeUndefined()
let dialog = modal.componentInstance as PermissionsDialogComponent
expect(dialog.object).toEqual(mailRules[0])
rulePatchSpy.mockReturnValueOnce(
throwError(() => new Error('error saving perms'))
)
dialog.confirmClicked.emit(perms)
expect(rulePatchSpy).toHaveBeenCalled()
expect(toastErrorSpy).toHaveBeenCalled()
rulePatchSpy.mockReturnValueOnce(of(mailRules[0] as PaperlessMailRule))
dialog.confirmClicked.emit(perms)
expect(toastInfoSpy).toHaveBeenCalledWith('Permissions updated')
modalService.dismissAll()
})
it('should support edit permissions on mail account objects', () => {
completeSetup()
const perms = {
owner: 99,
set_permissions: {
view: {
users: [1],
groups: [2],
},
change: {
users: [3],
groups: [4],
},
},
}
let modal: NgbModalRef
modalService.activeInstances.subscribe((refs) => (modal = refs[0]))
const accountPatchSpy = jest.spyOn(mailAccountService, 'patch')
component.editPermissions(mailAccounts[0] as PaperlessMailAccount)
expect(modal).not.toBeUndefined()
let dialog = modal.componentInstance as PermissionsDialogComponent
expect(dialog.object).toEqual(mailAccounts[0])
dialog = modal.componentInstance as PermissionsDialogComponent
dialog.confirmClicked.emit(perms)
expect(accountPatchSpy).toHaveBeenCalled()
})
}) })

View File

@ -51,6 +51,8 @@ import {
PermissionType, PermissionType,
PermissionsService, PermissionsService,
} from 'src/app/services/permissions.service' } from 'src/app/services/permissions.service'
import { PermissionsDialogComponent } from '../../common/permissions-dialog/permissions-dialog.component'
import { AbstractPaperlessService } from 'src/app/services/rest/abstract-paperless-service'
enum SettingsNavIDs { enum SettingsNavIDs {
General = 1, General = 1,
@ -307,14 +309,14 @@ export class SettingsComponent
(!this.mailAccounts || !this.mailRules) (!this.mailAccounts || !this.mailRules)
) { ) {
this.mailAccountService this.mailAccountService
.listAll() .listAll(null, null, { full_perms: true })
.pipe(first()) .pipe(first())
.subscribe({ .subscribe({
next: (r) => { next: (r) => {
this.mailAccounts = r.results this.mailAccounts = r.results
this.mailRuleService this.mailRuleService
.listAll() .listAll(null, null, { full_perms: true })
.pipe(first()) .pipe(first())
.subscribe({ .subscribe({
next: (r) => { next: (r) => {
@ -889,10 +891,12 @@ export class SettingsComponent
$localize`Saved account "${newMailAccount.name}".` $localize`Saved account "${newMailAccount.name}".`
) )
this.mailAccountService.clearCache() this.mailAccountService.clearCache()
this.mailAccountService.listAll().subscribe((r) => { this.mailAccountService
this.mailAccounts = r.results .listAll(null, null, { full_perms: true })
this.initialize() .subscribe((r) => {
}) this.mailAccounts = r.results
this.initialize()
})
}) })
modal.componentInstance.failed modal.componentInstance.failed
.pipe(takeUntil(this.unsubscribeNotifier)) .pipe(takeUntil(this.unsubscribeNotifier))
@ -917,10 +921,12 @@ export class SettingsComponent
modal.close() modal.close()
this.toastService.showInfo($localize`Deleted mail account`) this.toastService.showInfo($localize`Deleted mail account`)
this.mailAccountService.clearCache() this.mailAccountService.clearCache()
this.mailAccountService.listAll().subscribe((r) => { this.mailAccountService
this.mailAccounts = r.results .listAll(null, null, { full_perms: true })
this.initialize(true) .subscribe((r) => {
}) this.mailAccounts = r.results
this.initialize(true)
})
}, },
error: (e) => { error: (e) => {
this.toastService.showError( this.toastService.showError(
@ -946,11 +952,13 @@ export class SettingsComponent
.subscribe((newMailRule) => { .subscribe((newMailRule) => {
this.toastService.showInfo($localize`Saved rule "${newMailRule.name}".`) this.toastService.showInfo($localize`Saved rule "${newMailRule.name}".`)
this.mailRuleService.clearCache() this.mailRuleService.clearCache()
this.mailRuleService.listAll().subscribe((r) => { this.mailRuleService
this.mailRules = r.results .listAll(null, null, { full_perms: true })
.subscribe((r) => {
this.mailRules = r.results
this.initialize(true) this.initialize(true)
}) })
}) })
modal.componentInstance.failed modal.componentInstance.failed
.pipe(takeUntil(this.unsubscribeNotifier)) .pipe(takeUntil(this.unsubscribeNotifier))
@ -975,10 +983,12 @@ export class SettingsComponent
modal.close() modal.close()
this.toastService.showInfo($localize`Deleted mail rule`) this.toastService.showInfo($localize`Deleted mail rule`)
this.mailRuleService.clearCache() this.mailRuleService.clearCache()
this.mailRuleService.listAll().subscribe((r) => { this.mailRuleService
this.mailRules = r.results .listAll(null, null, { full_perms: true })
this.initialize(true) .subscribe((r) => {
}) this.mailRules = r.results
this.initialize(true)
})
}, },
error: (e) => { error: (e) => {
this.toastService.showError($localize`Error deleting mail rule.`, e) this.toastService.showError($localize`Error deleting mail rule.`, e)
@ -986,4 +996,30 @@ export class SettingsComponent
}) })
}) })
} }
editPermissions(object: PaperlessMailRule | PaperlessMailAccount) {
const modal = this.modalService.open(PermissionsDialogComponent, {
backdrop: 'static',
})
const dialog: PermissionsDialogComponent =
modal.componentInstance as PermissionsDialogComponent
dialog.object = object
modal.componentInstance.confirmClicked.subscribe((permissions) => {
modal.componentInstance.buttonsEnabled = false
const service: AbstractPaperlessService<
PaperlessMailRule | PaperlessMailAccount
> = 'account' in object ? this.mailRuleService : this.mailAccountService
object.owner = permissions['owner']
object['set_permissions'] = permissions['set_permissions']
service.patch(object).subscribe({
next: () => {
this.toastService.showInfo($localize`Permissions updated`)
modal.close()
},
error: (e) => {
this.toastService.showError($localize`Error updating permissions`, e)
},
})
})
}
} }