public static Parse ( string sddl ) : IList |
||
sddl | string | |
Résultat | IList |
public static IList<AccessControlEntity> Parse(string sddl)
{
List<AccessControlEntity> entities = new List<AccessControlEntity>();
if (!sddl.StartsWith("D:", StringComparison.Ordinal))
{
throw new ArgumentException(Utils.Format("Could not parse SDDL string: {0}", sddl));
}
sddl = sddl.Substring(2, sddl.Length-2);
string[] aces = sddl.Split('(', ')');
for (int ii = 0; ii < aces.Length; ii++)
{
if (String.IsNullOrEmpty(aces[ii]))
{
continue;
}
AccessControlEntity entity = new AccessControlEntity();
entity.Initialize(aces[ii]);
entities.Add(entity);
}
return entities;
}
/// <summary> /// Extracts the access rules from the SDDL string. /// </summary> private static void ParseSddl(string url, string sddl, List <HttpAccessRule> accessRules) { IList <AccessControlEntity> entities = AccessControlEntity.Parse(sddl); for (int ii = 0; ii < entities.Count; ii++) { AccessControlEntity entity = entities[ii]; if (entity.AccessType != "A") { continue; } ApplicationAccessRight rights = ApplicationAccessRight.None; switch (entity.Rights) { case "GA": case "GXGW": case "GWGX": { rights = ApplicationAccessRight.Configure; break; } case "GX": { rights = ApplicationAccessRight.Run; break; } } if (rights == ApplicationAccessRight.None) { continue; } string accountName = ApplicationAccessRule.SidToAccountName(entity.AccountSid); if (String.IsNullOrEmpty(accountName)) { continue; } HttpAccessRule rule = new HttpAccessRule(); rule.UrlPrefix = url; rule.Right = rights; rule.IdentityName = accountName; accessRules.Add(rule); } }