2016-10-26 32 views
2

默认情况下,没有授予ContentAuthor的具体PermissionCode。这是关于权限代码EDIT_SITECONFIG(启用内容作者来查看和编辑“设置”部分)。
Security > Groups > Content Authors > Permissions>管理站点配置SilverStripe硬编码权限设置EDIT_SITECONFIG

Site config permission

你怎么能强制此权限默认授予ContentAuthors

此权限可授予roles

+0

如何创建任何组?当然,您可以将用户添加到多个组,从而让所有必要的人员拥有所需的权限。那么它的默认值是什么都没有关系。 – Walf

+0

这也可以。但是我试图为每个SilverStripe安装创建一个更自动的解决方案,因此我希望在模块中对其进行硬编码。 – Faloude

回答

3

我们可以给Group类添加一个扩展名,它调用requireDefaultRecords来修改这个变量。

的mysite /码/扩展/ CustomGroup.php

class CustomGroup extends DataExtension { 

    public function requireDefaultRecords() { 
     parent::requireDefaultRecords(); 

     $contentAuthorGroup = Group::get()->filter('Code', 'content-authors')->first(); 
     if ($contentAuthorGroup) { 
      Permission::grant($contentAuthorGroup->ID, 'EDIT_SITECONFIG'); 
     } 
    } 
} 

我们使Group扩展我们config.yml文件。

的mysite/_config/config.yml

Group: 
    extensions: 
    - CustomGroup 

一件事这个解决方案需要注意的是它会更新EDIT_SITECONFIG权限设置每dev/build被调用时。这意味着如果通过CMS关闭了此权限,则会在下次调用dev/build时切换回来。

另一种方法是在第一个数据库版本上创建内容作者组。这将只设置EDIT_SITECONFIG一次,允许它通过CMS进行覆盖。

class CustomGroup extends DataExtension { 

    public function requireDefaultRecords() { 

     // Add default author group if no other group exists 
     $allGroups = Group::get(); 
     if (!$allGroups->count()) { 
      $authorGroup = new Group(); 
      $authorGroup->Code = 'content-authors'; 
      $authorGroup->Title = _t('Group.DefaultGroupTitleContentAuthors', 'Content Authors'); 
      $authorGroup->Sort = 1; 
      $authorGroup->write(); 
      Permission::grant($authorGroup->ID, 'CMS_ACCESS_CMSMain'); 
      Permission::grant($authorGroup->ID, 'CMS_ACCESS_AssetAdmin'); 
      Permission::grant($authorGroup->ID, 'CMS_ACCESS_ReportAdmin'); 
      Permission::grant($authorGroup->ID, 'SITETREE_REORGANISE'); 
      Permission::grant($authorGroup->ID, 'EDIT_SITECONFIG'); 
     } 

     parent::requireDefaultRecords(); 
    } 
} 
+0

壮丽。第一种方法与您所描述的完全相同。第二种方法似乎更好,但基本上只有通过将其包含在安装文件中才有效? – Faloude

+1

没错。第二种方法仅适用于站点安装期间的初始数据库构建。 – 3dgoo

+0

你确定第一种方法“打开”和“关闭”之间?我只是对它进行了测试,并且在每个开发/构建之后似乎都保持“真实” – Faloude