Not sure if you found a solution to this yet, but I had also run into this problem and finally set aside some time to work out how to solve.
The problem: By default, only members with full Admin access can edit/delete/add items in a complexTableField (or similar) relationship. Other users logging in would find the edit/delete buttons 'greyed-out' as per your screen-shot, and unable to perform the functions. The solution is to overload the canView, canEdit, canDelete and canCreate functions for your object. Here's how to do this:
In the related object (the has_many or many_many related class - can be extending Page or DataObject), include the following functions to override the standard permission checking process:
class MyObject extends DataObject {
static $db = array();
static $has_one = array(
'Parent' => 'ParentClass'
);
function getCMSFields_ForPopup(){
$fields = new FieldSet();
// insert fields
return $fields;
}
// These functions below are where the magic happens!
public function canCreate() {
if (Permission::check("SITETREE_EDIT_ALL")) return true;
return false;
}
public function canView() {
if (Permission::check("SITETREE_VIEW_ALL")) return true;
return false;
}
public function canEdit() {
if (Permission::check("SITETREE_EDIT_ALL")) return true;
return false;
}
public function canDelete() {
if (Permission::check("SITETREE_EDIT_ALL")) return true;
return false;
}
}
This code is checking the permissions for the logged-in user and if they are set to edit CMS pages ('SITETREE_EDIT_ALL'), they can then be allowed to edit, delete and add items of this class type - the function returns true, and the complexTableField (and similar relational fields), will enable the relevant buttons.
Hope this helps!