在sharepoint中,可以通过两种方式修改对讨论板的访问。
我想为参与讨论的所有用户提供添加,编辑和删除自己条目的能力。但是,我想为少数几个用户提供编辑和删除所有人的权限。
实现这一目标的最佳方法是什么?
我猜可以编写一个EventReceiver并为每个用户切换“高级设置”。另一个方面是给版主提供设计权限,并删除该讨论板的设计功能。
还有其他想法吗?
答案 0 :(得分:1)
ReadSecurity / WriteSecurity权限(第1点)应用于列表级别,而不是用户级别,因此尝试按用户划分这一点非常不方便。但是,虽然这些适用于该列表的所有用户,但提升权限的用户可以查看和编辑列表中的所有项目,无论此权限如何(前提是他们没有按照第2点的实用程序完全撤消其权限) 。我认为必要的权限是“管理列表”以获得此权限,但完全控制肯定会有效。
您可以通过修改每个项目上用户的实际权限级别来实现,但只需使用ReadSecurity / WriteSecurity就可以更清晰了。
答案 1 :(得分:1)
作为解决方法,我实现了一个事件处理程序(SPItemEventReceiver)来拦截更新(ItemUpdating)和删除(ItemDeleting)。
:检查所有权: 它将当前用户与项目[“作者”]进行比较,以确定它们是否为所有者,从而授予他们编辑/删除的权限。
:在主持人群组中: 如果不是这样,那么我为主持人添加了一个额外的用户组。一个关键是该组虽然没有正常使用,但必须具有分配给它的贡献者等权限。 SPWeb具有IsCurrentUserMemberOfGroup,用于确定用户是否属于主持人组。
//----------------------------------
//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";
}
}
另外,您需要使用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>