internal PermittedLevel GetPermittedLevel(string path, IUser user, bool isCreator, bool isLastModifier)
{
if (user.Id == -1)
return PermittedLevel.All;
//==>
var principals = GetPrincipals(user, isCreator, isLastModifier);
var allow = 0;
var deny = 0;
var firstPermInfo = GetFirstInfo(path);
if (firstPermInfo == null)
throw new ApplicationException(String.Format("PermissionInfo was not found. Path: {0}, User: {1}, isCreator: {2}, isLastModifier: {3}", path, user.Username, isCreator, isLastModifier));
if (firstPermInfo.Path == path)
firstPermInfo.AggregateLevelOnlyValues(principals, ref allow, ref deny);
for (var permInfo = firstPermInfo; permInfo != null; permInfo = permInfo.Inherits ? permInfo.Parent : null)
permInfo.AggregateEffectiveValues(principals, ref allow, ref deny);
//==<
var x = allow & ~deny;
PermittedLevel level;
if ((x & 0x4) != 0)
level = PermittedLevel.All;
else if ((x & 0x2) != 0)
level = PermittedLevel.PublicOnly;
else if ((x & 0x1) != 0)
level = PermittedLevel.HeadOnly;
else
level = PermittedLevel.None;
return level;
////HACK: harcoded implementation
//if (userId == 1)
// return PermittedLevel.All;
//if (path.StartsWith("/Root/System/ContentExplorer/explorer.aspx"))
// return PermittedLevel.None;
//return PermittedLevel.PublicOnly;
}
internal SecurityEntry[] GetAllEntries(string path)