惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 聂微东
MyScale Blog
MyScale Blog
H
Help Net Security
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
M
MIT News - Artificial intelligence
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
P
Proofpoint News Feed
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏

博客园 - 蒜头

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for (email address). 再谈Images到xps,pdf的转换 SQL Server 2005中xml类型和函数的简单应用 部分Office 2007文件格式转换为xps和pdf代码整理 Image.FromFile gives "Out of Memory" Exception for icon - 蒜头 简单介绍PDF,XPS,Images,Office 2007之间的转换方法 - 蒜头 - 博客园 SQL 2005 全文检索(续) 简单实现C#生成Excel 2007文件并下载 简单应用ReportViewer控件 配置SQL Server Session方法 采用负载均衡,部署了两个ASP.NET 2.0的站点服务器碰到的问题 初试VSTS 2008(TFS安装) Windows Server 2003分区修改方法[转载] 制作VSTO 2005 SE开发的Office 2007 AddIn的安装包 一个简单的document library event handler VS 2005 SP1 安装错误 [续] 一个简单的Checkbox Custom Field Type ASP.NET 2.0 SQL Cache 配置方法 SharePoint应用AJAX.NET和AJAX Control Toolkit
解读Document Library关于权限的对象模型
蒜头 · 2007-08-12 · via 博客园 - 蒜头

Document Library的权限默认是从站点继承的,我们可以手工修改这些权限,首先要切断权限的继承关系,然后
,可以修改任何一个组对当前List的权限:
下面我介绍如何在代码中修改一个document library的权限:

首先看一个实例:
当点击Lock时,设置这个document library对所有Group/User是只读的(不包括站点Owners),当点击Resume时,恢复每一个Group/User的对这个list的原始权限。
效果图:
锁定后:

恢复权限后:

从菜单的变化中我们可以看出权限的变化。

核心代码如下:

 1            SPWeb currentWeb = SPContext.Current.Web;
 2            SPListCollection lists = currentWeb.GetListsOfType(SPBaseType.DocumentLibrary);
 3            SPList list = lists[this.docLibName];
 4            //判断是否已经切断继承关系,没有的话,切断继承关系,并从父站点拷贝权限。
 5            //如果不切断继承,是不能修改它的权限的
 6            if (!list.HasUniqueRoleAssignments)
 7            {
 8                list.BreakRoleInheritance(true);
 9            }

10            //遍历list权限中所有Groups/Users,也就是在权限列表里的所有Groups/users
11            foreach (SPRoleAssignment ra in list.RoleAssignments)
12            {
13                SPPrincipal sp = ra.Member;
14                //获取一个Group/User,对站点Owners这个组操作是无效的,他们始终有FullControl的权限
15                if (!sp.Name.Contains("Owners"))
16                {
17                    //遍历该Group/User的所用有地权限
18                    foreach (SPRoleDefinition roleDefinition in ra.RoleDefinitionBindings)
19                    {
20                        //Limited Access比较特殊,它不会被Remove掉
21                        if (roleDefinition.Name != "Limited Access")
22                        {
23                            //备份当前的权限
24                            SPListItem newItem = original.Items.Add();
25                            newItem["Title"= sp.Name;
26                            newItem[ColumnPermission] = roleDefinition.Name;
27                            newItem.Update();
28                        }

29                    }

30
31                    //remove all permissions of the group
32                    ra.RoleDefinitionBindings.RemoveAll();
33
34                    //获取站点所有的Permissions
35                    SPRoleDefinitionCollection roles = currentWeb.RoleDefinitions;
36                    //获取Read权限
37                    SPRoleDefinition viewRoleDefinition = roles["Read"];
38                    //判断这个Group/User是否已经包含Read权限,如果不包含就添加Read权限
39                    if (!ra.RoleDefinitionBindings.Contains(viewRoleDefinition))
40                    {
41                        ra.RoleDefinitionBindings.Add(viewRoleDefinition);
42                        ra.Update();
43                    }

44                }

45            }

主要类解释如下:
SPRoleAssignment:代表一个Group/User的类
SPRoleDefinition:代表一个权限的类

foreach (SPRoleAssignment ra in list.RoleAssignments)

RoleAssignments是此list中所有Group/User的集合。

ra.RoleDefinitionBindings.RemoveAll();

RoleDefinitionBindings是某一个Group/User所拥有的权限集合。

SPRoleDefinitionCollection roles = currentWeb.RoleDefinitions;

RoleDefinitions是站点权限的集合。也就是下图,需要注意一点,WSS和MOSS是有区别的。