Code Access Security Schema長什麼樣?
================
提供一個例子, 請注意黃色的高亮的部分.
Schema的規則
- 每一個Solution manifest中只能有一個CodeAccessSecurity 節點.
- PolicyItem節點可以有任意多個.
- 任何一個PolicyItem節點只能有一個PermissionSet和Assemblies 節點.
- 每一個PermissionSet節點能夠擁有任意數目的IPermission節點
- IPermission節點的Schema是由.NET framework定義的.
- 每一個Assemblies節點能夠包含任意數目的Assembly節點.
- CodeAccessSecurity/PolicyItem/Assemblies/Assembly 節點與Solution/Assemblies/Assembly 節點不同..
- Assembly節點能夠擁有下列的任意屬性:
- Name
- Version
- PublicKeyBlob
添加和部署套件含code access security policy的solution的命令
===================
Add: stsadm.exe -o addSolution -filename "InstallAssemblies_Solution_2052225630.cab"
Deploy: stsadm.exe -o deploySolution -name "InstallAssemblies_Solution_2052225630.cab" -allcontenturls -local -force –allowCasPolicies
注意, stsadm.exe會需要為包含contain CAS policy的Solution Package使用-allowCasPolicies標誌位.
一旦Solution被部署之後, trust file長什麼樣?
===================
從manifest到trust file... 究竟發生了什麼?
==================
- PolicyItem中的PermissionSet是直接地插入到trust file中的(第一個高亮的部分). 在這個例子中, PermissionSet被命名為"installassemblies_solution_2052225630.cab-b172f003-d6c7-3e13-f737-a5d84a02e3e5-1". 這個名字是一個組合, 組成部分有installation package("installassemblies_solution_2052225630.cab") 加上SolutionID("b172f003-d6c7-3e13-f737-a5d84a02e3e5")加上PolicyItem index (在這個例子裡只有一個PolicyItem).
- 在manifest中, 對於每一個與給定的PolicyItem關聯的Assembly, 會建立一個CodeGroup(第二個黃色高亮的部分). 每一個CodeGroup都會引用在PolicyItem中的相關聯的PermissionSet. 另外, 每一個CodeGroup都被插入到parent CodeGroup容器的第一個位置上. 這會確保FirstMatchCodeGroup 行為能夠允許自訂的policies在預設的WSS Permission Set被應用之前得到應用.
現在讓我們看看CodeGroups是如何基於在manifest file中的資料被建立起來的
===================
正如剛才在schema規則部分提到的, Solution\CodeAccessSecurity\Assemblies\Assembly節點能夠包含三個屬性, Name, Version and PublicKeyBlob. 三個屬性的組合可以確定class正在使用哪個membership.
只有Name屬性—> UrlMembershipCondition
-------------------------
當assemblies沒有簽名, 並且僅僅部署在BIN目錄下的時候, 使用這種格式.
只有PublicKeyBlob屬性—> StrongNameMembershipCondition
----------------------------------
當你想要globally地應用一個policy到使用某個簽名的所有程式集上的時候, 使用這種格式.
PublicKeyBlob + Name –> StrongNameMembershipCondition
-------------------------------
當你想要隔離一個policy到某一個特定的assembly上的時候, 你可以使用這種格式. Policy會應用到所有的版本上.
PublicKeyBlob + Name + Version --> StrongNameMembershipCondition
-------------------------------
當你想要隔離一個policy到一個特定的, 簽名的, 某個版本的程式集上, 使用這種格式.
Code Access Security policies within SharePoint v3
http://www.bluedoglimited.com/SharePointThoughts/ViewPost.aspx?ID=249