当用户不是管理员,但他指定的组可以访问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;
}允许一个组查看和编辑模型管理记录的最佳方法是什么?
发布于 2014-06-02 06:40:29
这个例子是您想要遵循的,尽管具有不同的权限名。该示例中的权限名是如果用户能够访问CMSMain,这是处理页面的CMS的一部分。
要获得权限的名称,可以使用ModelAdmin的类名(例如,CategoryAdmin)并在其前面加上CMS_ACCESS_ (在本例中将给出CMS_ACCESS_CategoryAdmin )。
至于$member是null,那只是默认值。因此,只有在没有传入值的情况下,$member才是null。但是,这实际上并不重要,因为Permission::check专门处理在null值中传递的内容,并使用当前登录的用户。
https://stackoverflow.com/questions/23987457
复制相似问题