SharePoint Online可以使用PnP引擎部署站點模板。這個模板的功能非常強大,除了可以定製主題,外觀以外,還可以生成list並匯入資料,生成文件庫,匯入文件等等。
今天重點說一下其中的站點許可權部分。目前最新的Schema版本是202002,完整版可以參考 https://github.com/pnp/PnP-Provisioning-Schema/blob/master/OfficeDevPnP.ProvisioningSchema/ProvisioningSchema-2020-02.xsd。另外還有一個非常詳細的樣例檔案,連結是:https://github.com/pnp/PnP-Provisioning-Schema/blob/master/Samples/ProvisioningSchema-2020-02-FullSample-01.xml。
1 <pnp:Security BreakRoleInheritance="true" 2 CopyRoleAssignments="false" 3 ClearSubscopes="true" 4 AssociatedGroups="Test Value" 5 AssociatedMemberGroup="{parameter:AssociatedMemberGroup}" 6 AssociatedOwnerGroup="{parameter:AssociatedOwnerGroup}" 7 AssociatedVisitorGroup="{parameter:AssociatedVisitorGroup}" 8 RemoveExistingUniqueRoleAssignments="true" 9 ResetRoleInheritance="true" > 10 <pnp:AdditionalAdministrators ClearExistingItems="false"> 11 <pnp:User Name="user@contoso.com"/> 12 <pnp:User Name="U_SHAREPOINT_ADMINS"/> 13 </pnp:AdditionalAdministrators> 14 <pnp:AdditionalOwners ClearExistingItems="true"> 15 <pnp:User Name="user@contoso.com"/> 16 <pnp:User Name="U_SHAREPOINT_ADMINS"/> 17 </pnp:AdditionalOwners> 18 <pnp:AdditionalMembers> 19 <pnp:User Name="user@contoso.com"/> 20 <pnp:User Name="U_SHAREPOINT_ADMINS"/> 21 </pnp:AdditionalMembers> 22 <pnp:AdditionalVisitors> 23 <pnp:User Name="user@contoso.com"/> 24 <pnp:User Name="U_SHAREPOINT_ADMINS"/> 25 </pnp:AdditionalVisitors> 26 <pnp:SiteGroups> 27 <pnp:SiteGroup 28 Title="Power Users" 29 Description="Group of Power Users" 30 Owner="admin@contoso.com"> 31 <pnp:Members ClearExistingItems="true"> 32 <pnp:User Name="user1@contoso.com" /> 33 <pnp:User Name="user2@contoso.com" /> 34 <pnp:User Name="user3@contoso.com" /> 35 </pnp:Members> 36 </pnp:SiteGroup> 37 </pnp:SiteGroups> 38 <pnp:Permissions> 39 <pnp:RoleDefinitions> 40 <pnp:RoleDefinition Name="Manage List Items" Description="Allows a user to manage list items"> 41 <pnp:Permissions> 42 <pnp:Permission>ViewListItems</pnp:Permission> 43 <pnp:Permission>AddListItems</pnp:Permission> 44 <pnp:Permission>EditListItems</pnp:Permission> 45 <pnp:Permission>DeleteListItems</pnp:Permission> 46 </pnp:Permissions> 47 </pnp:RoleDefinition> 48 </pnp:RoleDefinitions> 49 <pnp:RoleAssignments> 50 <pnp:RoleAssignment Principal="Power Users" RoleDefinition="Manage List Items"/> 51 <pnp:RoleAssignment Principal="user1@contoso.com" RoleDefinition="Manage List Items"/> 52 <pnp:RoleAssignment Principal="user2@contoso.com" RoleDefinition="Full Control"/> 53 <pnp:RoleAssignment Principal="user3@contoso.com" RoleDefinition="Full Control" Remove="true"/> 54 </pnp:RoleAssignments> 55 </pnp:Permissions> 56 </pnp:Security>
我們從中擷取<pnp:Security>部分來看看如何自定義站點許可權。
程式碼第10行到第13行,可以指定site collection的管理員。
14行到17行,指定站點的管理員,要注意的是這個和site collection管理員是不一樣的。
18-25行,指定站點的成員和訪問者。
26-37行建立一個新的SharePoint Group,並且新增使用者和其他組到這個新組之中。
39-48行建立的新的permission level.
49-54行指定許可權到user或group。指定Group的時候,要使用“c:0t.c|tenant|{groupID}”作為Principal的引數,另外特別需要注意的是,Full Control,Edit,Read許可權像樣例填寫是不能正確應用的,需要分別改成Administrator,Editor和Reader。
另外可以針對列表和文件庫單獨設定許可權。在<pnp:ListInstance>下面,可以找到如下單獨的許可權設定部分。
1 <pnp:Security> 2 <pnp:BreakRoleInheritance CopyRoleAssignments="true" ClearSubscopes="true"> 3 <pnp:RoleAssignment Principal="user1@contoso.com" RoleDefinition="Full Control"/> 4 <pnp:RoleAssignment Principal="user2@contoso.com" RoleDefinition="Edit"/> 5 <pnp:RoleAssignment Principal="user3@contoso.com" RoleDefinition="View Only"/> 6 </pnp:BreakRoleInheritance> 7 </pnp:Security>
在設定好模板檔案後,可以使用powershell 進行測試
Apply-PnPProvisioningTemplate -Path template.xml #部署全部模板
or
Apply-PnPProvisioningTemplate -Path template.xml -Handlers SiteSecurity #只部署<pnp:Security>部分