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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Data Model Questions /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

DataObject overwrite CanEdit() in Decorator


Go to End


3 Posts   1730 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 here for the method.

Avatar
BenWu

Community Member, 97 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 .