44
55use InvalidArgumentException ;
66use LogicException ;
7- use ReflectionClass ;
8- use SilverStripe \CMS \Controllers \CMSMain ;
7+ use SilverStripe \Admin \Forms \UnsavedChangesIndicator ;
98use SilverStripe \Admin \Navigator \SilverStripeNavigator ;
9+ use SilverStripe \Admin \SingleRecordAdmin ;
10+ use SilverStripe \CMS \Controllers \CMSMain ;
1011use SilverStripe \Control \Controller ;
1112use SilverStripe \Control \Director ;
1213use SilverStripe \Control \HTTPRequest ;
13- use SilverStripe \Control \HTTPResponse ;
1414use SilverStripe \Control \HTTPResponse_Exception ;
15+ use SilverStripe \Control \HTTPResponse ;
1516use SilverStripe \Control \PjaxResponseNegotiator ;
1617use SilverStripe \Core \ClassInfo ;
1718use SilverStripe \Core \Config \Config ;
1819use SilverStripe \Core \Convert ;
1920use SilverStripe \Core \Injector \Injector ;
2021use SilverStripe \Core \Manifest \ModuleResourceLoader ;
2122use SilverStripe \Core \Manifest \VersionProvider ;
23+ use SilverStripe \Core \Validation \ValidationException ;
24+ use SilverStripe \Core \Validation \ValidationResult ;
2225use SilverStripe \Dev \TestOnly ;
2326use SilverStripe \Forms \DropdownField ;
2427use SilverStripe \Forms \FieldList ;
2831use SilverStripe \Forms \LiteralField ;
2932use SilverStripe \Forms \PrintableTransformation ;
3033use SilverStripe \i18n \i18n ;
34+ use SilverStripe \Model \ArrayData ;
3135use SilverStripe \Model \List \ArrayList ;
36+ use SilverStripe \Model \List \SS_List ;
3237use SilverStripe \ORM \CMSPreviewable ;
3338use SilverStripe \ORM \DataObject ;
3439use SilverStripe \ORM \FieldType \DBField ;
3540use SilverStripe \ORM \FieldType \DBHTMLText ;
3641use SilverStripe \ORM \Hierarchy \Hierarchy ;
37- use SilverStripe \Model \List \SS_List ;
38- use SilverStripe \Core \Validation \ValidationException ;
39- use SilverStripe \Core \Validation \ValidationResult ;
40- use SilverStripe \Admin \Forms \UnsavedChangesIndicator ;
4142use SilverStripe \Security \Permission ;
4243use SilverStripe \Security \PermissionProvider ;
4344use SilverStripe \Security \Security ;
4445use SilverStripe \Security \SecurityToken ;
4546use SilverStripe \SiteConfig \SiteConfig ;
46- use SilverStripe \Model \ArrayData ;
4747use SilverStripe \View \Requirements ;
4848use SilverStripe \View \SSViewer ;
4949
@@ -87,6 +87,11 @@ class LeftAndMain extends FormSchemaController implements PermissionProvider
8787 */
8888 private static bool $ ignore_menuitem = false ;
8989
90+ /**
91+ * When set to true, this controller is skipped when generating CMS access permissions.
92+ */
93+ private static bool $ skip_permission_generation = false ;
94+
9095 /**
9196 * A subclass of {@link DataObject}.
9297 *
@@ -1442,22 +1447,22 @@ public function providePermissions()
14421447 'sort ' => -100
14431448 ]
14441449 ];
1445-
1446- // Add any custom ModelAdmin subclasses. Can't put this on ModelAdmin itself
1447- // since its marked abstract, and needs to be singleton instantiated.
1448- foreach (ClassInfo::subclassesFor (ModelAdmin::class) as $ i => $ class ) {
1449- if ($ class === ModelAdmin::class) {
1450+ // Add any custom ModelAdmin or SingleRecordAdmin subclasses.
1451+ $ classes = array_merge (
1452+ ClassInfo::subclassesFor (ModelAdmin::class, false ),
1453+ ClassInfo::subclassesFor (SingleRecordAdmin::class, false )
1454+ );
1455+ foreach ($ classes as $ class ) {
1456+ if (ClassInfo::classImplements ($ class , TestOnly::class)) {
14501457 continue ;
14511458 }
1452- if (ClassInfo:: classImplements ( $ class , TestOnly::class )) {
1459+ if (Config:: inst ()-> get ( $ class , ' skip_permission_generation ' )) {
14531460 continue ;
14541461 }
1455-
14561462 // Check if modeladmin has explicit required_permission_codes option.
14571463 // If a modeladmin is namespaced you can apply this config to override
14581464 // the default permission generation based on fully qualified class name.
14591465 $ code = $ class ::getRequiredPermissions ();
1460-
14611466 if (!$ code ) {
14621467 continue ;
14631468 }
@@ -1476,7 +1481,6 @@ public function providePermissions()
14761481 'category ' => _t (__CLASS__ . '.CMS_ACCESS_CATEGORY ' , 'CMS Access ' )
14771482 ];
14781483 }
1479-
14801484 return $ perms ;
14811485 }
14821486
0 commit comments