ModelAdmin DataObjects的权限

时间:2014-06-02 04:42:38

标签: silverstripe

当用户不是管理员,但他指定的组可以访问ModelAdmin时,模板管理页面会列在菜单&用户可以访问它,但索引视图中不显示任何记录。

要显示记录,需要在模型中设置权限。文档说这样做:

http://doc.silverstripe.org/framework/en/3.1/reference/modeladmin

class Category extends DataObject {
  // ...
    public function canView($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
    public function canEdit($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
    public function canDelete($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
    public function canCreate($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
}

然而这不起作用,因为$ member是Null。将这些方法设置为true将显示记录。这样安全吗?或者这是否设置任何人能够编辑记录?以组成员无法访问该模型的用户身份登录管理员似乎不允许他们访问列表页面,但这似乎是错误的做法。

    public function canView($member = null) {
        return null;
    }
    public function canEdit($member = null) {
        return true;
    }
    public function canDelete($member = null) {
         return true;
    }
    public function canCreate($member = null) {
         return true;
    }

允许群组观看的最佳方式是什么?编辑modelAdmin的记录?

1 个答案:

答案 0 :(得分:3)

该示例是您要遵循的内容,但具有不同的权限名称。示例中的权限名称是用户是否有权访问CMSMain,这是处理页面的CMS的一部分。

要获取权限的名称,您可以获取ModelAdmin的类名称(例如CategoryAdmin)并在其前面添加CMS_ACCESS_(在此示例中为CMS_ACCESS_CategoryAdmin

至于$membernull,这只是默认值。因此,如果没有传入任何值,$member仅为null。这实际上并不重要,因为Permission::check专门处理在null值中传递并使用当前值而是登录用户。