浅谈Sharepoint权限 【转】 - windowsmin的日志 - 网易博客

来源:百度文库 编辑:神马文学网 时间:2024/10/03 02:31:17

浅谈Sharepoint权限 【转】

Moss,sharePoint 2009-09-25 15:22:08 阅读196 评论0 字号:大中

基于Sharepoint做一个客户管理的系统,由于客户方对权限的要求非常严格,所以不得不自己去定义网站的权限,好在Sharepoint提供的权限系统比较完善,我们所创建的权限包括从创建SPWeb到创建SPListItem均实现了一遍,也算是顺利的解决了问题。项目做到第一阶段,谈谈自己的一些认识。

 

在开始之前先明确几个类或者定义:

Sharepoint权限系统采用 权限——角色 ——对象——关联 的概念,即:对于一个对象(如:SPWeb,SPList,SPListItem),可以通过添加某个已经包含了角色(SPRoleDefinition)的关联(SPRoleAssignment)而更改该对象的权限,而角色(SPRoleDefinition)则是提前通过SPWeb.RoleDefinitions添加到网站内的,注意:只有SPWeb有此属性可以添加角色定义,其他对象如SPSite,SPList,SPListItem均不能添加角色定义,当然他们也不需要。

 

相关类:

 

用户或用户组:SPPrincipal 扩展了两个子类:SPUser和SPGroup

权限基类:SPBasePermissions,通过或计算合成一个自定义的权限,注意:需要编辑权限的前提是有查看权限;

角色类:SPRoleDefinition,采用web.RoleDefinitions.Add(definition)的方式添加角色;

关联类:对于某个SPPrincipal添加一个SPRoleDefinition的角色,然后再将该关联添加到对象上去,注意:在未将该关联添加到对象上时,该关联都无效。

 

首先定义自己的权限系统,我定义了四个级别的角色,本别具有权限:查看、新建、编辑、删除,这四个权限要远低于Sharepoint本身的权限,这里以新建角色为例说明: 同时定义了负责向网站添加角色Register类,每一个角色都会对应一个Register类,是为了方便权限的扩展,采用依赖倒置。

为对象分配权限:参数SPListItem 也可以是 SPWeb,SPList,权限的分配一般是在对象刚刚创建后来实现,如

SPWebTemplate template = web.Site.GetCustomWebTemplates((uint)web.Locale.LCID)[WebTemplate];

SPWeb newWeb = RootSPWeb.Webs.Add(rurl, customerName, string.Empty, (uint)2052, template, true, false);

此时就应该对该newWeb做权限操作。而SPListItem的操作一般是在SPItemEventReceiver的ItemAdded事件中去实现

Code:

 

private void RoleAssignment(SPListItem item, SPPrincipal groupOrUser, SPRoleDefinition role)
        {
        if (!item.HasUniqueRoleAssignments)
        {
            item.BreakRoleInheritance(true);//true则断开并继承原有权限,false则断开不继承原有权限
        }
        
            
            this.DisableEventFiring();

            item.Web.AllowUnsafeUpdates = true;

            SPRoleAssignment assignment = new SPRoleAssignment(groupOrUser);
            assignment.RoleDefinitionBindings.Add(role);
            item.RoleAssignments.Add(assignment);

            item.Update();

            this.EnableEventFiring();
        }

 Code:

//角色基类:实际上基类提供了查看的权限,因此在查看中不需要扩展
public abstract class BasePermissionRole
    {
        private string roleName;
        public virtual string RoleName
        {
            get
            {
                return roleName;
            }
            set
            {
                roleName = value;
            }
        }

        private string roleDescription;
        public virtual string RoleDescription
        {
            get
            {
                return roleDescription;
            }
            set
            {
                roleDescription = value;
            }
        }

        public abstract SPBasePermissions ComposePermission();

        protected virtual SPBasePermissions ComposeViewPermission()
        {
        //对应Sharepoint下的34个基本权限
            return SPBasePermissions.ViewListItems | SPBasePermissions.ViewVersions |
                   SPBasePermissions.ViewFormPages | SPBasePermissions.ViewPages |
                   SPBasePermissions.OpenItems | SPBasePermissions.CreateAlerts |
                   SPBasePermissions.BrowseUserInfo | SPBasePermissions.UseRemoteAPIs |
                   SPBasePermissions.UseClientIntegration | SPBasePermissions.Open;
        }

        public abstract BaseRoleRegister CreateRegister();//通过依赖倒置以及单件实现角色注册
    }
//新建角色,override基类的ComposePermission()方法,并在View的基础上扩展
public class AddPermissionRole : BasePermissionRole
    {
        public AddPermissionRole()
        {
            this.RoleName = "新建"; 
            this.RoleDescription = "向列表中添加项目,向文档库中添加文档,以及添加 Web 讨论评论";
        }

        public override string RoleName
        {
            get
            {
                return base.RoleName;
            }
            set
            {
                base.RoleName = value;
            }
        }

        public override SPBasePermissions ComposePermission()
        {
            return base.ComposeViewPermission() | SPBasePermissions.AddListItems;
        }

        public override BaseRoleRegister CreateRegister()
        {
            return new AddRoleRegister(this);
        }
    }

//注册基类:
public class BaseRoleRegister
    {
        public BaseRoleRegister(BasePermissionRole role)
        {
            this.Permission = role;
        }

        protected BasePermissionRole Permission;

        public virtual SPRoleDefinition ExecuteRegister(SPWeb web)
        {
            foreach (SPRoleDefinition rd in web.RoleDefinitions)
            {
                if (rd.Name == this.Permission.RoleName)
                    return rd;
            }

            SPRoleDefinition definition = new SPRoleDefinition();
            definition.Name = this.Permission.RoleName;
            definition.BasePermissions = this.Permission.ComposePermission();
            definition.Description = this.Permission.RoleDescription;

            web.RoleDefinitions.BreakInheritance(true, true);
            web.RoleDefinitions.Add(definition);
            web.Update();

            return web.RoleDefinitions[this.Permission.RoleName];
        }
    }

//新建角色的注册类:
public class ApproveRoleRegister : BaseRoleRegister
    {
        public ApproveRoleRegister(BasePermissionRole role)
            : base(role)
        { }

    }

基础权限列表:

 

ViewListItems

查看项目  -  查看列表中的项目、文档库中的文档和查看 Web 讨论评论。

OpenItems

打开项目  -  使用服务器端文件处理程序查看文档源。

ViewVersions

查看版本  -  查看列表项或文档的以前版本。

CreateAlerts

创建通知  -  创建电子邮件通知。

ViewFormPages

查看应用程序页面  -  查看表单、视图和应用程序页面。枚举列表。

ViewPages

查看网页  -  查看网站中的网页。

BrowseUserInfo

浏览用户信息  -  查看有关网站用户的信息。

UseRemoteAPIs

使用远程接口  -  使用 SOAP、Web DAV 或 SharePoint Designer 接口访问网站。

UseClientIntegration

使用客户端集成功能  -  使用启动客户端应用程序的功能。如果没有此权限,用户必须本地处理文档并上载更改。

Open

打开  -  允许用户打开网站、列表或文件夹,以便访问该容器中的项目。

 

 

 

 

 

 

ManageLists

管理列表  -  创建和删除列表,添加或删除列表中的栏,以及添加或删除列表的公共视图。

CancelCheckout

替代签出版本  -  放弃或签入已由其他用户签出的文档。

AddListItems

添加项目  -  向列表中添加项目,向文档库中添加文档,以及添加 Web 讨论评论。

EditListItems

编辑项目  -  编辑列表中的项目、文档库中的文档、文档中的 Web 讨论评论以及自定义文档库中的 Web 部件页。

DeleteListItems

删除项目  -  从列表中删除项目、从文档库中删除文档,以及删除文档中的 Web 讨论评论。

ApproveItems

批准项目  -  批准列表项或文档的次要版本。

DeleteVersions

删除版本  -  删除列表项或文档的以前版本。

ManagePermissions

管理权限  -  创建和更改网站上的权限级别,并为用户和用户组分配权限。

ViewUsageData

查看使用率数据  -  查看有关网站使用率的报告。

ManageSubwebs

创建子网站  -  创建子网站,例如工作组网站、会议工作区网站和文档工作区网站。

ManageWeb

管理网站  -  授予执行该网站的所有管理任务并管理内容的能力。

AddAndCustomizePages

添加和自定义网页  -  添加、更改或删除 HTML 网页或 Web 部件页,并使用与 Windows SharePoint Services 兼容的编辑器编辑网站。

ApplyThemeAndBorder

应用主题和边框  -  将主题或边框应用于整个网站。

ApplyStyleSheets

应用样式表  -  将样式表(.CSS 文件)应用于网站。

CreateGroups

创建用户组  -  创建一个用户组,该用户组可用于网站集中的任何位置。

BrowseDirectories

浏览目录  -  使用 SharePoint Designer 和 Web DAV 接口枚举网站中的文件和文件夹。

EnumeratePermissions

枚举权限  -  枚举网站、列表、文件夹、文档或列表项中的权限。

ManageAlerts

管理通知  -  管理网站中所有用户的通知。

EditMyUserInfo

编辑个人用户信息  -  允许用户更改个人用户信息,例如添加图片。

ManagePersonalViews

管理个人视图  -  创建、更改和删除列表的个人视图。

AddDelPrivateWebParts

添加/删除个人 Web 部件  -  在 Web 部件页中添加或删除个人 Web 部件。

UpdatePersonalWebParts

更新个人 Web 部件  -  更新 Web 部件以显示个性化信息

0人  |  分享到:      阅读(196)| 评论(0)| 引用(0) |举报
浅谈Sharepoint权限 【转】 - windowsmin的日志 - 网易博客 让镇获得县级权限 - 彭澎的日志 - 网易博客 浅谈英语文章阅读 - 灬_Youki的日志 - 网易博客 【浅谈红楼】红楼梦 - 同恩的日志 - 网易博客 浅谈开关电源原理 1- 清蝉的日志 - 网易博客 浅谈《清明节》邮票的原地 - 杨国华的日志 - 网易博客 差之毫厘失之千里——浅谈影响射击命中的主要因素 - D Boy的日志 - 网易博客 浅谈房屋共有共用面积的协议分摊 - 十八子li的日志 - 网易博客 搜索技巧:浅谈搜索引擎的使用方法 - 山间溪流的日志 - 网易博客 搜索技巧:浅谈搜索引擎的使用方法 - 山间溪流的日志 - 网易博客 浅谈神阙穴治百病及养生保健功能 - 黄针邪的日志 - 网易博客 浅谈我国创业板市场发展 - 十八子li的日志 - 网易博客 浅谈商业银行理财业务 十八子li的日志 - 网易博客 浅谈商业银行理财2业务 - 十八子li的日志 - 网易博客 博客园 - SharePoint团队 的日志 - 网易博客 浅谈房屋权属登记审核中引入公证制度的益处 - 十八子li的日志 - 网易博客 【浅谈红楼】从为人处世的实用角度看红楼梦后30回 - 同恩的日志 - 网易博客 【浅谈红楼】从为人处世的实用角度看红楼梦前30回 - 同恩的日志 - 网易博客 (转)知己 - dn的日志 - 网易博客 【   】 - zhangyu2047的日志 - 网易博客 独来独往的日志 - 网易博客 孤寡老人的日志 - 网易博客 - 梅花的日志 - 网易博客