【发布时间】:2012-03-30 00:47:09
【问题描述】:
我正在 Visual Studio 中为 sharepoint 2010 编写一个可视化 Web 部件。这个 Web 部件的全部意义在于通过单击按钮更改权限。我能够访问权限并将它们输出到屏幕上。我可以更改我拥有的对象的权限,然后在屏幕上显示更改后的权限。我的问题是,一切都完成后,并没有改变实际的权限。
webpart.TargetLibrary 是一个文本字段,在其他地方作为我希望调查的库的名称输入。
SPListCollection docLibs = m_SharePointWeb.GetListsOfType(SPBaseType.DocumentLibrary);
SPDocumentLibrary targetLib = (SPDocumentLibrary)(docLibs[webPart.TargetLibrary]);
SPListItemCollection libFolders = targetLib.Folders;
SPListItem folderItem = libFolders[0];
SPRoleAssignmentCollection folderRoles = folderItem.RoleAssignments;
SPRoleAssignment roleAssign = folderRoles[0];
SPRoleDefinitionBindingCollection spRDBC = roleAssign.RoleDefinitionBindings;
SPRoleDefinition Contribute = spRDBC[0].ParentWeb.RoleDefinitions["Contribute"];
folderItem.RoleAssignments[0].RoleDefinitionBindings.Add(Contribute);
folderItem.Update();
这是一个稍微简化的版本 - 原始版本有一些 for 循环和各种其他代码做其他事情。无论如何,根据我从网上查看的所有内容,此代码应该将“Contribute”权限添加到第一个文件夹中列表中的第一个角色。正如我所提到的,它对本地对象这样做,但没有永久效果。 Update() 调用似乎什么也没做,我不确定在这种情况下它是否应该存在。我尝试了 UpdateOverwriteVersion() - 它也没有做任何事情。任何关于我可能做错的建议将不胜感激。
顺便说一句,这几乎不是什么大问题,但我不禁觉得有一种更有效、更直接的方式来获取 Web 对象,这样我就可以通过名称获取角色定义。对此问题的任何建议也将不胜感激。
编辑:解决方案移至下面的答案。
【问题讨论】:
-
您应该发布您的解决方案作为答案。
-
啊。确实。完毕。谢谢。
标签: sharepoint sharepoint-2010 permissions web-parts