浅谈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:
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)
????????{?}
????}
基礎權限列表:
?
? | ? | ||||||||||||||||||||||||||||||||||||||||||||
| ? | ? | ||||||||||||||||||||||||||||||||||||||||||||
| ? |
轉載于:https://www.cnblogs.com/jerryshi/archive/2009/04/09/1432382.html
總結
以上是生活随笔為你收集整理的浅谈Sharepoint权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle自动imp脚本
- 下一篇: 如何在ASP.NET中使用Windows