public static bool AddZoneGroup(string name, string description)
{
// Policy 레벨 열거를 얻는다.
IEnumerator enumerator = SecurityManager.PolicyHierarchy();
// Policy 레벨들(Enterprise, Machine, User) 중에서 Machine Policy를 찾는다.
PolicyLevel machineLevel = null;
while (enumerator.MoveNext())
{
PolicyLevel level = (PolicyLevel)enumerator.Current;
if (level.Label == "Machine")
{
machineLevel = level;
}
}
if (machineLevel == null)
throw new InvalidOperationException("Machine Policy를 찾을 수 없습니다.");
CodeGroup rootCodeGroup = machineLevel.RootCodeGroup;
// 코드 그룹이 이미 존재하는가 확인한다.
foreach (CodeGroup group in rootCodeGroup.Children)
{
if (group.MembershipCondition is UrlMembershipCondition)
{
if (group.Name == name)
{
return false;
}
}
}
// 루트 코드 그룹의 하위 코드 그룹들의 이름과 설정된 권한 집합을 표시한다.
foreach (CodeGroup group in rootCodeGroup.Children)
{
if (group.Name == "Trusted_Zone")
{
Console.WriteLine("Code Group Name = {0}, PermissionSet Name={1}", group.Name, group.PermissionSetName);
//Zone 멤버쉽 생성
ZoneMembershipCondition zoneship = new ZoneMembershipCondition(SecurityZone.Trusted);
// 권한 집합 생성 (full trust)
NamedPermissionSet permissionSet = new NamedPermissionSet("FullTrust");
PolicyStatement policyStatement = new PolicyStatement(permissionSet);
// 추가할 코드 그룹 생성
UnionCodeGroup cg = new UnionCodeGroup(zoneship, policyStatement);
cg.Name = name;
cg.Description = description;
rootCodeGroup.AddChild(cg);
// CAS 설정 저장
SecurityManager.SavePolicy();
return true;
}
}
return false;
} }