如何在文件添加的sharepoint 2013上创建事件接收器更改权限

时间:2013-08-28 13:19:59

标签: c# sharepoint permissions event-receiver

我有一个库(“Documents”),我想添加一个事件接收器,它将删除添加项目的权限。我已经尝试了多种方法来做到这一点,但我没有那么试验,我无法弄清楚我错在哪里。使用以下代码我设法BreakInheritance,但没有设法删除所有assignmets并添加一个新的。

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);
    }

1 个答案:

答案 0 :(得分:0)

首先,您需要在SPSecurity.RunWithElevatedPrivileges(link)中实例化新的SPSite和SPWeb对象。

其次,如果要删除所有权限,则应使用false参数调用SPListItem.BreakRoleInheritance。在这种情况下,项目将没有权利。然后你可以添加你需要的任何权利。

我个人的建议 - 你永远不应该使用空的挡块。向UPS Logging服务发送错误消息,这非常简单但有用。