希望在明天

如果,你没有耐心等待成功的到来,那么,你将用一生的耐心去面对失败。

解读Document Library关于权限的对象模型


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


posted on 2007-08-12 22:56  蒜头  阅读(1519)  评论(4编辑  收藏  举报

导航