protected bool IsPermitted(Document doc, IUser user, bool isCurrentUser) { var path = doc.Get(LucObject.FieldName.Path); var createdById = IntegerIndexHandler.ConvertBack(doc.Get(LucObject.FieldName.CreatedById)); var lastModifiedById = IntegerIndexHandler.ConvertBack(doc.Get(LucObject.FieldName.ModifiedById)); var isLastPublic = BooleanIndexHandler.ConvertBack(doc.Get(LucObject.FieldName.IsLastPublic)); var isLastDraft = BooleanIndexHandler.ConvertBack(doc.Get(LucObject.FieldName.IsLastDraft)); var level = isCurrentUser ? SecurityHandler.GetPermittedLevel(path, createdById, lastModifiedById) : SecurityHandler.GetPermittedLevel(path, createdById, lastModifiedById, user); switch (level) { case PermittedLevel.None: return(false); case PermittedLevel.HeadOnly: return(isLastPublic); case PermittedLevel.PublicOnly: return(isLastPublic); case PermittedLevel.All: return(isLastDraft); default: throw new NotImplementedException(); } }