protected override void Render(HtmlTextWriter writer) { if (RequiredPermission == Permission.None) { RequiredPermission = Page.GetType().GetCustomAttributes(typeof(IPermittable), true).OfType <IPermittable>() .Select(p => PermissionMap.GetMaximumPermission(p.RequiredPermission)) .OrderByDescending(rp => rp) .FirstOrDefault(); } var item = new SelectionUtility(this, Page.GetEngine()).SelectedItem; if (!Page.GetEngine().SecurityManager.IsAuthorized(Page.User, item, RequiredPermission)) { var message = "User: "******"(" + GetUserRoles(Page.User.Identity.Name) + ")" + " Item:" + item.GetType().Name + "_" + item.ID + "_" + item.State + "_" + item.Title + ", RequiredPremission:" + RequiredPermission + ", AlteredPermissions:" + item.AlteredPermissions + " , Write_Roles: (" + GetRolesForPermission(item, Permission.Write) + ")" + " , Publish_Roles: (" + GetRolesForPermission(item, Permission.Publish) + ")" + " , Admin_Roles: (" + GetRolesForPermission(item, Permission.Administer) + ")" + GetAdditionalInfo(item, Page.User); Page.GetEngine().Resolve <IErrorNotifier>().Notify(new UnauthorizedAccessException(message)); cv.IsValid = false; cv.RenderControl(writer); } else { base.Render(writer); } }