44
55use ProcessWire \WireData ;
66use ProcessWire \ProcessGraphQL ;
7+ use ProcessWire \GraphQL \Utils ;
78
89class Config extends WireData {
910
@@ -13,34 +14,38 @@ public function __construct(ProcessGraphQL $module)
1314 {
1415 $ this ->module = $ module ;
1516
16- // cache reference for useful ProcessWire API variables
17- $ apiVars = [
18- 'templates ' ,
19- 'fields ' ,
20- 'roles ' ,
21- 'users ' ,
22- 'pages ' ,
23- ];
24- foreach ($ apiVars as $ varName ) {
25- $ this ->$ varName = \ProcessWire \wire ($ varName );
26- }
27-
2817 // Assign Config to module so we can access it easily accross the module codebase.
2918 $ module ->Config = $ this ;
19+
20+ // Wierd behavior with ProcessWire. $user->hasPermission() does not
21+ // work if you do not load the required roles beforehand.
22+ Utils::roles ()->find ("" );
3023 }
3124
3225 public function get ($ key )
3326 {
27+ $ super = Utils::user ()->isSuperuser ();
3428 switch ($ key ) {
3529 case 'maxLimit ' :
3630 case 'fullWidthGraphiQL ' :
3731 case 'legalPageFields ' :
3832 case 'legalPageFileFields ' :
3933 return $ this ->module ->$ key ;
40- case 'legalTemplates ' :
41- return $ this ->getLegalTemplates ();
42- case 'legalFields ' :
43- return $ this ->getLegalFields ();
34+ case 'legalViewTemplates ' :
35+ if ($ super ) return $ this ->getLegalTemplates ();
36+ return $ this ->getLegalTemplatesForPermission ('page-view ' );
37+ case 'legalCreateTemplates ' :
38+ if ($ super ) return $ this ->getLegalTemplates ();
39+ return $ this ->getLegalTemplatesForPermission ('page-create ' );
40+ case 'legalEditTemplates ' :
41+ if ($ super ) return $ this ->getLegalTemplates ();
42+ return $ this ->getLegalTemplatesForPermission ('page-edit ' );
43+ case 'legalViewFields ' :
44+ if ($ super ) return $ this ->getLegalFields ();
45+ return $ this ->getLegalFieldsForPermission ('view ' );
46+ case 'legalEditFields ' :
47+ if ($ super ) return $ this ->getLegalFields ();
48+ return $ this ->getLegalFieldsForPermission ('edit ' );
4449 default :
4550 return parent ::get ($ key );
4651 }
@@ -49,28 +54,45 @@ public function get($key)
4954 protected function getLegalTemplates ()
5055 {
5156 $ legalTemplates = $ this ->module ->legalTemplates ;
52- $ templates = \ProcessWire \wire ('templates ' )->find ("name= " . implode ('| ' , $ legalTemplates ));
53- $ user = \ProcessWire \wire ('user ' );
54-
55- // Wierd behavior with ProcessWire. $user->hasPermission() does not
56- // work if you do not load the required roles beforehand.
57- \ProcessWire \wire ('roles ' )->find ("" );
57+ return Utils::templates ()->find ("name= " . implode ('| ' , $ legalTemplates ));
58+ }
5859
60+ protected function getLegalTemplatesForPermission ($ permission = 'page-view ' )
61+ {
62+ $ templates = $ this ->getLegalTemplates ()->find ("useRoles=1 " );
5963 foreach ($ templates as $ template ) {
60- // We serve only those that user has permission to view
61- if (!$ user ->hasTemplatePermission ('page-view ' , $ template )) {
64+ if (!Utils::user ()->hasTemplatePermission ($ permission , $ template )) {
6265 $ templates ->remove ($ template );
6366 }
6467 }
65-
6668 return $ templates ;
6769 }
6870
6971 protected function getLegalFields ()
7072 {
7173 $ legalFields = $ this ->module ->legalFields ;
72- $ fields = \ProcessWire \wire ('fields ' )->find ("name= " . implode ('| ' , $ legalFields ));
74+ return Utils::fields ()->find ("name= " . implode ('| ' , $ legalFields ));
75+ }
76+
77+ protected function getLegalFieldsForPermission ($ permission = 'view ' )
78+ {
79+ $ fields = $ this ->getLegalFields ()->find ("useRoles=1 " );
80+ $ rolesType = $ permission . "Roles " ;
81+ foreach ($ fields as $ field ) {
82+ if (!$ this ->userHasPermission ($ field ->$ rolesType )) {
83+ $ fields ->remove ($ field );
84+ }
85+ }
7386 return $ fields ;
7487 }
7588
89+ protected function userHasPermission ($ rolesID )
90+ {
91+ $ userRolesID = Utils::user ()->roles ->explode ('id ' );
92+ foreach ($ userRolesID as $ userRoleID ) {
93+ if (in_array ($ userRoleID , $ rolesID )) return true ;
94+ }
95+ return false ;
96+ }
97+
7698}
0 commit comments