I created a trigger to share my cases, this may or may not help you, This will share the case to the partner user that created it, along with the group he is in
trigger PartnerCaseSharing on Case (after insert, after update) {
Map<id,User>PartnerUsermap = new Map<id,user>([select id,UserType from user where UserType = 'PowerPartner' and isActive = true] );
List<GroupMember>GroupMemberList = new List<GroupMember>([select GroupId,UserOrGroupId from GroupMember]);
List<CaseShare> CsShareList = new list<CaseShare>();
if(!PartnerUsermap.isEmpty()){
for(Case cs : trigger.new){
if(PartnerUsermap.containsKey(cs.CreatedById)){
for(GroupMember grpmem : GroupMemberList){
if(grpmem.UserOrGroupId == cs.CreatedById){
CaseShare csshare = new CaseShare (CaseId = cs.id,UserOrGroupId = grpmem.GroupId,CaseAccessLevel = 'Edit');
CsShareList.add(csshare);
}
}
}
}
}
if(!CsShareList.isEmpty()){
Database.SaveResult[] lsr = Database.insert(CsShareList,false);
Integer i=0;
for(Database.SaveResult sr : lsr){
if(!sr.isSuccess()){
Database.Error err = sr.getErrors()[0];
if(!(err.getStatusCode() == StatusCode.FIELD_FILTER_VALIDATION_EXCEPTION
&& err.getMessage().contains('AccessLevel'))){
trigger.newMap.get(CsShareList[i].CaseId).
addError(
'Unable to grant sharing access due to following exception: '
+ err.getMessage());
}
}
i++;
}
}
}