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