如何在文件上创建事件接收器更改许可添加的共享点2013
本文关键字:添加 许可 共享 2013 接收器 文件 事件 创建 | 更新日期: 2023-09-27 18:29:15
我有一个库("Documents"),我想在其中添加一个事件接收器,该接收器将删除对所添加项目的权限。我已经尝试了多种方法来做到这一点,但我还没有尝试过,我也不知道自己错在哪里。在下面的代码中,我设法打破了继承,但并没有设法删除所有的赋值并添加一个新的。
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
if (properties.ListTitle.Equals("Documents"))
I really need help on this one.{
using (SPSite site = new SPSite(properties.WebUrl))
{
site.AllowUnsafeUpdates = true;
using (SPWeb web = site.OpenWeb())
{
SPUser user = web.CurrentUser;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
try
{
web.AllowUnsafeUpdates = true;
SPListItem li = properties.ListItem;
SPFile lf = web.GetFile(li.Url);
SPRoleType read = SPRoleType.Guest;
lf.Item.BreakRoleInheritance(true);
while (lf.Item.RoleAssignments.Count > 0)
{
lf.Item.RoleAssignments.Remove(0);
}
AssignPermissionsToItem(lf.Item, user, read);
web.AllowUnsafeUpdates = false;
}
catch (Exception ex)
{
}
});
}
}
}
}
public static void AssignPermissionsToItem(SPListItem item, SPPrincipal obj, SPRoleType roleType)
{
if (!item.HasUniqueRoleAssignments)
{
item.BreakRoleInheritance(true);
}
SPRoleAssignment roleAssignment = new SPRoleAssignment(obj);
SPRoleDefinition roleDefinition = item.Web.RoleDefinitions.GetByType(roleType);
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
item.RoleAssignments.Add(roleAssignment);
}
首先,您需要在SPSecurity.RunWithElevatedPrivileges(链接)中实例化新的SPSite和SPWeb对象。
其次,如果要删除所有权限,则应使用false参数调用SPListItem.BreakRoleHeritage。在这种情况下,项目将没有权限。然后你可以添加你需要的任何权限。
我个人的建议是,你永远不应该使用空的捕获块。将错误信息发送到UPS日志记录服务,这真的很简单,但很有帮助。