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

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
V2EX - 技术
V2EX - 技术
美团技术团队
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
C
Cybersecurity and Infrastructure Security Agency CISA
W
WeLiveSecurity
博客园 - 聂微东
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Help Net Security
GbyAI
GbyAI
G
GRAHAM CLULEY
The Last Watchdog
The Last Watchdog
U
Unit 42
罗磊的独立博客
B
Blog RSS Feed
K
Kaspersky official blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
Know Your Adversary
Know Your Adversary
IT之家
IT之家
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Y
Y Combinator Blog
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
S
Schneier on Security
Last Week in AI
Last Week in AI
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 热门话题
雷峰网
雷峰网
Martin Fowler
Martin Fowler
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
Netflix TechBlog - Medium
T
Tor Project blog
The GitHub Blog
The GitHub Blog
The Hacker News
The Hacker News
F
Fortinet All Blogs
Webroot Blog
Webroot Blog
Spread Privacy
Spread Privacy
Cloudbric
Cloudbric
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Schneier on Security
Schneier on Security
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
The Exploit Database - CXSecurity.com
Microsoft Security Blog
Microsoft Security Blog

博客园 - 蒜头

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是有区别的。