自訂現有權限等級
在“網站設定”頁上的“使用者和許可權”下,單擊“進階許可權”。
在工具列上,單擊“設定”,然後單擊“權限等級”。
在權限等級列表中,單擊您要自訂的權限等級的名稱。
在許可權列表中,選中或清除相應的複選框以向權限等級中添加許可權或者從中刪除許可權。
單擊“提交”。
MOSS中的許可權結構主要有三部分:網站許可權,列表許可權,個人許可權。
網站許可權由18種如:
列表許可權由12種,如:
個人許可權由三種,如:
2.權限等級
上面提供的就是基本的許可權,不同的許可權組成MOSS中的權限等級。MOSS本身為我們提供了一些權限等級,我們也可以根據自己的需求來自訂。
我們在自訂自己的權限等級的時候可以參考Moss本身的,在他的基礎上進行修改,我們編輯現有的網站層級,裡面提供了一個複製權限等級的功能,
我們可以複製一份在這個基礎進行修改來定義我們自己的權限等級。
3.展示了MOSS許可權,使用者和權限物件之間的關係:
4.使用SharePoint物件模型控制許可權
主要使用下面幾個類:
SPUser,SPGroup,SPRoleDefinition,SPRoleAssignment。
SPRoleDefinition用於角色(即前面所說的“權限等級”)的定義
它的幾個重要的屬性有:
Name:角色名稱
Description:角色描述
BasePermissions:角色的許可權(就是在這個地方指定詳細的許可權)
另外,Type屬性是SPRoleType枚舉類型的,關於許可權的枚舉是SPBasePermissions
SPRoleAssignment用於許可權的分配,它比較簡單,只有三個public的屬性:
Member:把許可權分配給誰
Parent:在什麼東西上分配許可權
RoleDefinitionBindings:分配什麼許可權
Member是SPPrincipal類型的是SPUser和SPGroup的父類
Parent:實現了ISecurityxxxx介面
RoleDefinitionBindings:可以理解為SPRoleDefinition的一個集合
在2007裡面每一個能分配許可權的東西(SPWeb、SPList、SPListItem等)都會有一個RoleAssignments屬性,它是一個SPRoleAssignmentCollection類型的屬性,
用於分配許可權
此外,在SPWeb裡還有RoleDefinitions屬性(只在SPWeb裡有,也就是說角色只能定義在網站裡)
舉例如下:
我們要給一個使用者(user)分配一個在列表(list)上的許可權,許可權使用了一個名叫“xxx”的角色
代碼如下:
SPRoleAssignment ra = new SPRoleAssignment(user);
SPRoleDefinition rd = web.RoleDefinitions["xxx"];
ra.RoldDefinitionBindings.Add(rd);
list.RoleAssignments.Add(ra);
又比如,修改一個使用者的許可權:
SPRoleAssignment ra = list.RoleAssignments.GetAssignmentByPrincipal(user);
SPRoleDefinition rd = web.RoleDefinitions["xxx"];
ra.RoldDefinitionBindings.Add(rd);
ra.Update();但是,如果這個列表的許可權之前是繼承自網站的,
那麼上面的代碼並不會自動的修改這種繼承,反而會拋出異常
我們必須手工解除這種繼承關係:
list.BreakRoleInheritance(true);
參數中true的意思是把繼承下來的許可權重新copy過來(如果你不改它的話,它和網站的許可權還是一樣的),如果是false,則使用列表模版中定義的預設許可權
如果要建立一個角色的話,直接new一個SPRoleDefinition,改改它的Name、Description、BasePermissions屬性,然後再加到web.RoleDefinitions裡就可以了;
或者在new的時候可以選擇一個現有的角色copy過來,再改一改。這個代碼我就不寫了
此外,在許可權方面還有一些其他的小改動:
在2003裡,使用xxx.Permissions得到xxx(可以是SPWeb、SPList)的許可權,但是在2007裡Permissions屬性也被廢棄了
我們記得Permissions有一個非常有用的東西叫DoesUserHavePermissions來判斷目前使用者許可權的,
在Permissions屬性被廢棄掉之後,這個方法移植到了SPWeb、SPList等類裡
直接使用list.DoesUserHavePermissions就ok了
而且,現在這個方法不僅可以判斷目前使用者的許可權,也可以判斷指定使用者的許可權(通過SPUser)
另外,SPWeb、SPList及SPListItem也加入了CheckPermissions方法來判斷使用者權限,如果沒有則丟一個異常出來,這和以前的xxx.Permissions.Demand方法是一致的
5.角色定義,分配,繼承
角色由兩部分組成:角色定義和角色指派。
角色定義,或者說權限等級,是與角色關聯的許可權列表。許可權是 SharePoint 網站中唯一可控制的操作。例如,具有 Read 角色的使用者可以瀏覽網站中的頁面並查看列表中的項目。與 Windows SharePoint Services 2.0 中不同,在 Windows SharePoint Services 3.0 中,從不直接使用許可權來系統管理使用者許可權。所有使用者權限和組許可權都通過角色來管理。角色定義是與特定對象綁定的許可權集合。角色定義界定於網站範圍內(例如,Full Control、Read、Contribute、Design 或 Limited Access),並且在網站內的各個位置具有相同的意義,但其在同一個網站集合內各網站之間的可能有所不同。角色定義也可以從父網站繼承,就像許可權一樣。
角色指派是角色定義、使用者和組以及範圍之間的關係(例如,一個使用者可能是列表 1 上的讀者,而另一個使用者是列表 2 上的讀者)。通過角色指派表示的關係是使 Windows SharePoint Services 安全管理基於角色的關鍵。所有許可權都通過角色來管理;您從不向使用者直接分配許可權,而只分配定義完善、一致、含義豐富的許可權集合(角色定義)。通過角色指派向角色定義中添加或從中移除使用者和組,以此來管理特定權限。
網站管理員可以使用“管理角色”頁來自訂預設角色定義和建立其他自訂角色,其中,“管理角色”頁列出了網站中可用的角色定義。
角色定義繼承
Windows SharePoint Services 支援繼承角色定義,就像它支援繼承許可權那樣,而取消角色定義繼承也要求取消許可權繼承。
每個 SharePoint 對象都可以擁有自己的許可權集,也可以從其父容器繼承許可權。Windows SharePoint Services 不支援部分繼承,對象將繼承其父級的所有許可權,並且也可以擁有一些自己的許可權。許可權可以是專屬的,也可以是繼承的。Windows SharePoint Services 不支援定向繼承。例如,對象只能從其父容器繼承,而不能從某些其他對象或容器繼承。
當網站繼承角色定義時,這些角色是唯讀,就像繼承的網站中的唯讀許可權一樣。使用者將獲得導航到擁有專屬角色定義的父網站的連結。所有新網站(包括擁有特定權限的新網站)的預設設定都是從父網站繼承角色定義。如果是特定權限,則角色定義可以還原為繼承的角色定義,或編輯為本地角色定義。
根據下列禁止規則,網站中的角色定義繼承對許可權繼承產生影響:
· 不能繼承許可權,除非它還繼承角色定義。
· 不能建立專屬角色定義,除非它還建立特定權限。
· 不能還原為繼承的角色定義,除非它也還原網站中的所有特定權限。現有許可權依賴角色定義。
· 不能還原為繼承的許可權,除非它也還原為繼承的角色定義。網站的許可權始終與網站的角色定義關聯。