对Sharepoint权限的一些认识
基于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:
基础权限列表:
|
|
|
|
|
ViewListItems | 查看项目 - 查看列表中的项目、文档库中的文档和查看 Web 讨论评论。 |
OpenItems | 打开项目 - 使用服务器端文件处理程序查看文档源。 |
ViewVersions | 查看版本 - 查看列表项或文档的以前版本。 |
CreateAlerts | 创建通知 - 创建电子邮件通知。 |
ViewFormPages | 查看应用程序页面 - 查看表单、视图和应用程序页面。枚举列表。 |
ViewPages | 查看网页 - 查看网站中的网页。 |
BrowseUserInfo | 浏览用户信息 - 查看有关网站用户的信息。 |
UseRemoteAPIs | 使用远程接口 - 使用 SOAP、Web DAV 或 SharePoint Designer 接口访问网站。 |
UseClientIntegration | 使用客户端集成功能 - 使用启动客户端应用程序的功能。如果没有此权限,用户必须本地处理文档并上载更改。 |
Open | 打开 - 允许用户打开网站、列表或文件夹,以便访问该容器中的项目。 |
|
|