534
Chương 13: Bảo mật
// nó trùng khớp với tất cả code. Điều này nghĩa là tất cả
// các assembly đều khởi đầu với một grant-set rỗng cho
// mức chính sách miền ứng dụng.
policy.RootCodeGroup = new FirstMatchCodeGroup(
new AllMembershipCondition(),
new PolicyStatement(policy.GetNamedPermissionSet("Nothing"))
);
// Tạo tập các code group để xác định các quyền nào sẽ được cấp
// cho một assembly do một publisher tạo ra. Vì code group gốc
// là một FirstMatchCodeGroup, nên quá trình phân giải chính sách
// chỉ so trùng assembly trên các group con cho đến khi tìm thấy
// trùng khớp đầu tiên. Mỗi code group được tạo với đặc tính
// Exclusive để bảo đảm rằng assembly không lấy thêm quyền
// nào từ các code group khác.
// Tạo code group cấp tập quyền FullTrust cho các
// assembly được phát hành bởi Microsoft.
X509Certificate microsoftCert =
X509Certificate.CreateFromCertFile("microsoft.cer");
policy.RootCodeGroup.AddChild(new UnionCodeGroup(
new PublisherMembershipCondition(microsoftCert),
new PolicyStatement(policy.GetNamedPermissionSet("FullTrust"),
PolicyStatementAttribute.Exclusive)
));
// Tạo code group cấp tập quyền Internet cho các
// assembly được phát hành bởi Litware, Inc.
X509Certificate litwareCert =
X509Certificate.CreateFromCertFile("litware.cer");
policy.RootCodeGroup.AddChild(new UnionCodeGroup(
new PublisherMembershipCondition(litwareCert),
new PolicyStatement(policy.GetNamedPermissionSet("Internet"),
PolicyStatementAttribute.Exclusive)