Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions

DataObject overwrite CanEdit() in Decorator


Reply

3 Posts   642 Views

Avatar
Matze0681

22 September 2011 at 10:57am Community Member, 25 Posts

Hi,

I have a managed model "Product" which has a hasmany relation to "ProductVariations". Now i have the problem if the logged in user has not the FullAdministration right in his SecurityGroup, the ProductVariation records in the HasManyComplexTableFIeld are not Editable by that user.
I know that i could make this editable by just placing an "function canEdit(){return true;}" in the ProductVariation DataObject. But for me this is no option cause this class is part of the EcommerceModule i dont want to change. This is why i use a DataObjectDecorator for the Variations.

The problem now is, that it does not work if i place the 'canEdit' method in this decorator. The method is just not called at all.

Changing the HasManyComplexTableField's permissions via setPermissions() doesnt make a difference too.

Thanks in advance for your help.

Cheers,
Matze

Avatar
lanks

23 September 2011 at 6:49pm Community Member, 61 Posts

Hi

Possibly the reason is that you added the canEdit method to your DataObjectDecorator without the parameter $member? e.g. canEdit ($member)

Have a look at the API docs [url=http://api.silverstripe.org/2.4/sapphire/model/DataObjectDecorator.html#methodcanEdit]here[/url] for the method.

Avatar
BenWu

19 April 2013 at 9:35am (Last edited: 8 June 2013 4:08am), Community Member, 90 Posts

Hello Matze0681, don't think it works for me. I also tried to use a DataObjectExtension to set some permissions for a set of data models but with no success.

Looking at the canEdit method in DataObject Class

/**
    * @param Member $member
    * @return boolean
    */
   public function canEdit($member = null) {
      return Permission::check('ADMIN', 'any', $member);
   }

if it has

$this->extend ('updateCanEdit')

we can just make the 'updateCanEdit' method in the decorator. But the core doesn't make the method extentable :-( , only overwritable by sub-class it .