php - SilverStripe 硬编码权限设置 EDIT_SITECONFIG

标签 php silverstripe

默认情况下,有一个特定的PermissionCode 未授予ContentAuthor。这是关于权限代码 EDIT_SITECONFIG(使内容作者能够查看和编辑“设置”部分)。

此权限可以授予以下位置的角色:
安全 > 组 > 内容作者 > 权限 > 管理网站配置

Site config permission

如何强制默认将此权限授予 ContentAuthors

最佳答案

我们可以向 Group 类添加一个扩展,调用 requireDefaultRecords 来修改此变量。

mysite/code/extensions/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');
        }
    }
}

我们在 config.yml 文件中启用 Group 扩展。

mysite/_config/config.yml

Group:
  extensions:
    - CustomGroup

此解决方案需要注意的一件事是,每次调用 dev/build 时,它都会更新 EDIT_SITECONFIG 权限设置。这意味着如果通过 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();
    }
}

关于php - SilverStripe 硬编码权限设置 EDIT_SITECONFIG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256775/

相关文章:

来自文件路径的 PHP CURL PUT

SilverStripe 3 - 扩展评论表

php - 从 SilverStripe UploadField 中删除 "Edit"和 "Delete from files"

php - Silverstripe:在 Widget 安装时导入特定于 Widget 的 CSS

PHP:检查文件是否可以删除

php - Mysql 和 PHP : searching in different mysql tables

php - 使用 php 和 cURL 从外部网站提取元素/数据

php - 无需客户端登录的 Google Analytics Core Reporting API 版本 3.0

button - 在 SilverStripe 中向 CMS 添加按钮

php - Silverstripe 按日期获取最后 8 项并倒序显示