Программирование средств безопасности в SharePoint 2007 - Защищаемые объекты
ОГЛАВЛЕНИЕ
Защищаемые объекты
Реальная широта возможностей настройки безопасности WSS включает в себя гибкость, обеспечиваемую защищаемыми объектами, такими как веб-узлы, списки и элементы списков. Каждый защищаемый объект может содержать список управления доступом (Access Control List – ACL), являющийся двоичной структурой данных, используемой WSS во время выполнения, чтобы определить, дан ли доступ участнику безопасности. По умолчанию, единственным защищаемым объектом, имеющим ACL, является веб-узел верхнего уровня. Все дочерние объекты (такие как списки, элементы списков и дочерние веб-узлы) наследуют ACL родительского объекта, если они не разрывают иерархию наследования, создавая, тем самым, собственный ACL.
Объектная модель WSS содержит интерфейс, именуемый ISecurableObject, который моделирует защищаемый объект внутри семейства веб-узлов WSS (см. рис. 4). Интерфейс ISecurableObject, применяемый объектами SPWeb, объектами SPList и объектами SPItem, предоставляет основу для проведения проверок доступа во время выполнения, а также для настройки разрешений.
Рис. 4 Интерфейс ISecurableObject
При начале настройки разрешений внутри семейства веб-узлов, важно понимать, что все веб-узлы, списки и элементы списков составляют единую иерархию защищаемых объектов. По умолчанию, только веб-узел верхнего уровня содержит уникальный ACL и определяет назначения на уровне разрешений, диктующие, какие разрешения на доступ к объектам имеются у пользователей. Все дочерние объекты наследуют свои разрешения от веб-узла верхнего уровня. Однако, управление доступом можно настроит более детально, дав защищаемому объекту собственный уникальный набор назначений уровня разрешений. Например, код показанный на рис. 5 позволяет создать новую библиотеку документов и настроить ее с помощью уникального набора разрешений.
Figure 5 Configuring a Unique Set of Permissions
SPWeb site = SPContext.Current.Web;
Guid listID = site.Lists.Add("Proposals",
"Library desc",
SPListTemplateType.DocumentLibrary);
SPDocumentLibrary doclib = (SPDocumentLibrary)site.Lists[ListID];
doclib.OnQuickLaunch = true;
doclib.BreakRoleInheritance(false);
SPUser AllFteGroup = Web.SiteUsers[@"LITWAREINC\AllFTE"];
SPRoleAssignment assignAllFteGroup = new SPRoleAssignment(AllFteGroup);
SPRoleDefinition roleDesign = this.Web.RoleDefinitions["Read"];
assignAllFteGroup.RoleDefinitionBindings.Add(roleDesign);
doclib.RoleAssignments.Add(assignAllFteGroup);
doclib.Update();
Этот пример кода прерывает наследование разрешений по умолчанию от родительского объекта, используя вызов BreakRoleInheritance. Если вызвать BreakRoleInheritance и передать значение параметра true («истина»), защищаемый объект сперва настраивается с помощью ACL, являющейся копией ACL родительского объекта. Если вызвать BreakRoleInheritance и передать значение параметра false («ложь»), защищаемый объект сперва настраивается с помощью пустой ACL. Это значит, что эта библиотека документов не предоставляет доступа пользователям, не являющимся ее владельцами, или администраторами веб-узла.
Windows SharePoint Services 3.0 добавили в систему безопасности весьма полезное усовершенствование, позволяющее настраивать разрешения вплоть до уровня элементов и документов. Делает это возможным объектная модель WSS, поскольку объекты SPListItem также применяют интерфейс ISecurableObject.
Код на рис. 6 создает новый документ внутри библиотеки документов и затем наделяет его уникальным набором разрешений, отличающимся от разрешений его родительской библиотеки. Отметьте, что этот код использует служебный метод, именуемый WriteDocument, который принимает ссылку на SPDocumentLibrary и имя файла. Реализация метода использует форматы файлов Office Open XML для создания документа Word и записи его обратно в библиотеку документов. Метод WriteDocument возвращает ссылку на SPFile, которую затем можно использовать для доступа к SPListItem связанному с документов, позволяя прервать наследование разрешений и назначить уникальный набор разрешений.
Figure 6 Set of Permissions that Differs from Its Parent
SPWeb site = SPContext.Current.Web;
Guid listID = site.Lists.Add("Proposals",
"Library desc",
SPListTemplateType.DocumentLibrary);
SPDocumentLibrary doclib = (SPDocumentLibrary)Web.Lists[ListID];
doclib.OnQuickLaunch = true;
doclib.Update();
SPFile doc1 = WriteDocument(doclib, "Adventure Works Merger.docx");
doc1.Item.BreakRoleInheritance(false);
SPGroup group = Web.Groups["Litware Contact Managers"];
SPRoleAssignment assignContribute = new SPRoleAssignment(group);
SPRoleDefinition roleContibute = this.Web.RoleDefinitions["Contribute"];
assignContribute.RoleDefinitionBindings.Add(roleContibute);
doc1.Item.RoleAssignments.Add(assignContribute);
doc1.Item.Update();
Выводы
Я знаю, что этот рассказ несколько напоминает пробежку по основным аспектам модели безопасности WSS. Я показал, как WSS отслеживает внешних участников безопасности на уровне семейства веб-узлов с помощью профиля в списке данных о пользователях и объяснил, как WSS представляет этих внешних участников безопасности в объектной модели WSS, используя объекты SPUser. Я также продемонстрировал, как WSS поддерживает группы WSS представил несколько программных методик для повышения привилегий и олицетворения пользователей WSS. Эти методики предоставляют возможности и гибкость, необходимые при создании реальных приложений.
Хотя WSS полагается на лежащую в основе систему компонентов в вопросе проверки подлинности пользователя, она берет ответственность за проверку подлинности и контроль доступа. Модель проверки подлинности WSS в основном основана на поименованных наборах разрешений, известных как уровни разрешений или роли. Уровень разрешений может быть назначен объекту SPUser, но на практике обычно следует выбирать назначение уровня разрешений группам WSS.
Тэд Пэтиссон – автор, преподаватель и обладатель звания «Наиболее ценный специалист» (MVP) по SharePoint, живущий в городе Тампа, штат Флорида. Его компания, Ted Pattison Group (www.TedPattison.net), также занимается углубленным обучением профессиональных разработчиков по SharePoint. Недавно Тед завершил работу над книгой под названием Inside Windows SharePoint Services 3.0 для издательства Microsoft Press.