当用户不是管理员,但他分配的组有权访问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为空。 将这些方法设置为返回 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 记录的最佳方法是什么?
示例是您要遵循的示例,但具有不同的权限名称。示例中的权限名称是用户是否有权访问CMSMain
,这是处理页面的CMS的部分。
要获取权限的名称,您需要获取 ModelAdmin 的类名(例如,CategoryAdmin
(,并在其前面加上CMS_ACCESS_
(在本例中,这将给出CMS_ACCESS_CategoryAdmin
(。
至于$member
null
,这只是默认值。因此,只有在没有传入任何值的情况下$member
才会null
。但这实际上并不重要,因为Permission::check
专门处理传入null
值并使用当前登录用户。