본문 바로가기
Application/C#.net

프레임워크 권한 설정 - trust zone 영역 추가

by 현이빈이 2009. 4. 14.
반응형

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;
  } }

반응형