默认情况下,有一个特定的PermissionCode
未授予ContentAuthor
。这是关于权限代码 EDIT_SITECONFIG
(使内容作者能够查看和编辑“设置”部分)。
此权限可以授予以下位置的角色
:
安全 > 组 > 内容作者 > 权限
> 管理网站配置
如何强制默认将此权限授予 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/