0

追加されたアイテムの権限を削除するイベント レシーバーを追加したいライブラリ (「ドキュメント」) があります。これを行うためにすでに複数の方法を試しましたが、それほど実験的ではなく、どこが間違っているのかわかりません。次のコードでは、BreakInheritance に成功しましたが、すべての割り当てを削除して新しいものを追加することはできませんでした。

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

1 に答える 1

0

まず、SPSecurity.RunWithElevatedPrivileges (リンク) 内で新しい SPSite および SPWeb オブジェクトをインスタンス化する必要があります。

次に、すべての権限を削除する場合は、SPListItem.BreakRoleInheritanceを false 引数で呼び出す必要があります。この場合、アイテムには権利がありません。そして、必要な権利を追加できます。

そして私の個人的なアドバイス - 空の catch-block を使用しないでください。エラー メッセージを UPS ログ サービスに送信します。これは非常に簡単ですが、役に立ちます。

于 2013-08-29T10:06:42.697 に答える