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   673 Views

Avatar
Matze0681

Community Member, 25 Posts

22 September 2011 at 10:57am

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

Community Member, 61 Posts

23 September 2011 at 6:49pm

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

Community Member, 91 Posts

19 April 2013 at 9:35am

Edited: 08/06/2013 4:08am

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 .