вы пробовали $this->Categories()->First()->canView()
?
читая комментарии ниже, мне кажется, что вы пытаетесь вызвать canView в списке всех связанных с вами объектов CategoryPage (ComponentSet)
[EDIT]
как вы упомянули в комментариях ниже, вы теперь получаете ошибку в cms, вызывающем canView для необъекта. я предполагаю, что вы еще не прикрепили какие-либо категории к какому-либо продукту, поэтому Categories () -> First () возвращает NULL. пожалуйста попробуйте:
function canView() {
//always show this product for users with full administrative rights (see tab 'Security' in CMS
if(Permission::check('ADMIN')) return true;
//go and get all categories this product belongs to
$categories = $this->Categories();
//are there any categories?
if($categories->Count() > 0) {
//get the first category to see wheter it's viewable by the current user
return $categories->First()->canView();
} else {
//product doesn't belong to any categories, so don't render it
return false;
}
}
Я действительно не понимаю, почему вы реализовали эту проверку canView. действительно ли это имеет значение, когда Продукт уже связан с категорией? в противном случае просто return true;
в вашем методе canView.