As a work-around, I implemented an event handler (SPItemEventReceiver) to intercept updates (ItemUpdating) and deletes (ItemDeleting).
:Check for ownership:
It compares the current user to the item["Author"], to determine if they are the owner, which gives them permission to edit/delete.
:Is in moderator group:
If that is not true, then I have added an additional user group for moderators. One key is that the group, though not used normally, must have permission such as Contributor assigned to it. The SPWeb has IsCurrentUserMemberOfGroup for determining whether the user belongs to the Moderator group.
//----------------------------------
//here is enough to get you started.
//----------------------------------
class DiscussionBoardItemCreated : SPItemEventReceiver
{
public override void ItemUpdating(SPItemEventProperties properties)
{
//check ContentType
// -- properties.AfterProperties["ContentType"]
//are they the owner
// -- item["Author"]
//are they in a particular user group
// -- web.IsCurrentUserMemberOfGroup(web.Groups["MyModeratorGroup"].ID)
//properties.Cancel = true -OR- false;
//properties.ErrorMessage = "" -OR- "No access";
}
}
Also, you'll need to to elements.xml.
FROM: http://koenvosters.wordpress.com/2009/07/31/howto-create-an-event-handler-for-sharepointmoss-2007/
<?xml version=“1.0“ encoding=“utf-8“ ?>
<Elements xmlns=“http://schemas.microsoft.com/sharepoint/“>
<Receivers ListTemplateId=“100“>
<Receiver>
<Name>AddingEventHandler</Name>
<Type>ItemAdding</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>MyEventHandler, Version=1.0.0.0, Culture=neutral,PublicKeyToken=ca176e059473d6b1</Assembly>
<Class>MyEventHandler.DemoEventHandler</Class>
<Data></Data>
<Filter></Filter>
</Receiver>
</Receivers>
</Elements>