我正在编写一个名为" custom_block"的新块。我想添加" custom_capability"到" custom_role"。我尝试通过网络管理工具手动添加它,它可以正常工作。
现在,我想以编程方式将其添加到我的所有Moodle实例中,因此在blocks/custom_block/db/access.php
内部看起来像这样:
'block/custom_block:custom_capability' => array(
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'archetypes' => array(
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'custom_role' => CAP_ALLOW
),
),
会引发error/moodle/invalidlegacy
错误,因为' custom_role'不是原型(即使他们与基本的Moodle角色共享名称),但没有替代"角色"字段来定义这个。
那我怎么能实现这个目标呢?
限制:
答案 0 :(得分:0)
您可能需要向blocks/custom_block/db/install.php
if ($roleid = $DB->get_field('role', 'id', array('shortname' => 'custom_role') {
$context = \context_system::instance();
assign_capability('block/custom_block:custom_capability', CAP_ALLOW,
$roleid, $context);
}