Sharepoint 2013 - разрешение на редактирование документа только для создателя документа - PullRequest
0 голосов
/ 27 июня 2018

Существует ли способ управления разрешениями в SharePoint, чтобы пользователь, который загружает документ в библиотеку документов, был единственным, кто может редактировать или удалять этот файл? Я хочу, чтобы другие пользователи могли открывать файл, но только для чтения и не извлекаются (мне все равно, сохранят ли они его на свой компьютер и внесут ли изменения в локальную копию).

Полагаю, что краткой информацией об этом может быть группа разрешений, которая позволяет всем добавлять и удалять файлы, но только создатель добавленного файла может проверить и отредактировать.

Спасибо за помощь!

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете создать приемник событий для этой библиотеки, когда файл будет загружен, нарушить разрешение наследования и назначить уникальное разрешение для автора и других (возможно, для группы).

Вот пример кода из technet .

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using System.Collections.Specialized;

namespace SurveyPermissionsMgr
{
    class ThreeMonthSurveyPermissionsMgr : SPItemEventReceiver
    {
        public override void ItemAdded(SPItemEventProperties properties)
        {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite site = new SPSite(properties.WebUrl))
                    {
                        site.AllowUnsafeUpdates = true;

                        using (SPWeb web = site.OpenWeb())
                        {
                            web.AllowUnsafeUpdates = true;

                            SPListItem myItem = web.Lists[properties.ListId].GetItemById(properties.ListItem.ID); //  GET LIST OBJECT FROM SPWEB, NOT EVENT PROPERTIES

                            myItem.BreakRoleInheritance(false);

                            this.DisableEventFiring();
                            myItem.Update();

                            SPMember member = web.SiteGroups["My Group"];
                            SPPrincipal principal = (SPPrincipal)member;
                            SPRoleDefinition roledefinition = web.RoleDefinitions.GetByType(SPRoleType.Contributor);
                            SPRoleAssignment myRoleAssignment = new SPRoleAssignment(principal);
                            myRoleAssignment.RoleDefinitionBindings.Add(roledefinition);
                            myItem.RoleAssignments.Add(myRoleAssignment);

                            string managerstring = myItem["Manager Account Id"].ToString();
                            SPUser manager = web.EnsureUser(managerstring);

                            myItem["Manager"] = manager;

                            SPPrincipal managerprincipal = (SPPrincipal)manager;
                            SPRoleDefinition managerroledefinition = web.RoleDefinitions.GetByType(SPRoleType.Reader);
                            SPRoleAssignment ManagerRoleAssignment = new SPRoleAssignment(managerprincipal);
                            ManagerRoleAssignment.RoleDefinitionBindings.Add(managerroledefinition);
                            myItem.RoleAssignments.Add(ManagerRoleAssignment);

                            string associatestring = myItem["Author"].ToString();
                            int userid = Convert.ToInt32(associatestring.Substring(0, associatestring.IndexOf(";#")));
                            SPUser associate = web.AllUsers.GetByID(userid);
                            SPPrincipal associateprincipal = (SPPrincipal)associate;
                            SPRoleDefinition associateroledefinition = web.RoleDefinitions.GetByType(SPRoleType.Reader);
                            SPRoleAssignment AssociateRoleAssignment = new SPRoleAssignment(associateprincipal);
                            AssociateRoleAssignment.RoleDefinitionBindings.Add(associateroledefinition);
                            myItem.RoleAssignments.Add(AssociateRoleAssignment);

                            myItem.Update();
                            this.EnableEventFiring();
                            web.AllowUnsafeUpdates = false;
                            site.AllowUnsafeUpdates = false;

                            //Handle messaging
                            StringDictionary dict = new StringDictionary();
                            dict.Add("to", manager.Email);
                            dict.Add("from", "us@you.com");
                            dict.Add("subject", "bla bla bla");
                            string msgbody = "bla bla bla";
                            SPUtility.SendEmail(web, dict, msgbody);
                        }
                    }
                });
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...