예제 #1
0
        public static Error.Types OnCreating(SiteSettings ss, WikiModel wikiModel)
        {
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(wikiModel.Mine());
            foreach (var controlId in Forms.Keys())
            {
                switch (controlId)
                {
                case "Wikis_Title":
                    if (!ss.GetColumn("Title").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Wikis_Body":
                    if (!ss.GetColumn("Body").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
예제 #2
0
 private static HtmlBuilder NavigationMenu(
     this HtmlBuilder hb,
     SiteSettings ss,
     long siteId,
     string referenceType,
     bool useNavigationMenu)
 {
     return(hb.Ul(
                id: "NavigationMenu",
                action: () => hb
                .Li(
                    action: () => hb
                    .Div(action: () => hb
                         .A(
                             href: NewHref(ss),
                             attributes: SiteIndex(ss)
                                 ? new HtmlAttributes()
                             .OnClick("$p.openTemplateDialog($(this));")
                             .DataAction("OpenTemplateDialog")
                             .DataMethod("post")
                                 : null,
                             action: () => hb
                             .Span(css: "ui-icon ui-icon-plus")
                             .Text(text: Displays.New()))),
                    _using: ss.ReferenceType == "Sites" && Routes.Action() == "index"
                     ? ss.CanManageSite()
                     : ss.CanCreate() && ss.ReferenceType != "Wikis")
                .Li(
                    css: "sub-menu",
                    action: () => hb
                    .Div(
                        attributes: new HtmlAttributes().DataId("ViewModeMenu"),
                        action: () => hb
                        .Span(css: "ui-icon ui-icon-triangle-1-e")
                        .Text(text: Displays.View()))
                    .ViewModeMenu(ss: ss),
                    _using: Def.ViewModeDefinitionCollection
                    .Any(o => o.ReferenceType == referenceType))
                .Li(
                    css: "sub-menu",
                    action: () => hb
                    .Div(
                        attributes: new HtmlAttributes().DataId("SettingsMenu"),
                        action: () => hb
                        .Span(css: "ui-icon ui-icon-gear")
                        .Text(text: Displays.Setting()))
                    .SettingsMenu(siteId: siteId, ss: ss))
                .Li(
                    css: "sub-menu",
                    action: () => hb
                    .Div(
                        attributes: new HtmlAttributes().DataId("AccountMenu"),
                        action: () => hb
                        .Span(css: "ui-icon ui-icon-person")
                        .Text(text: SiteInfo.UserName((
                                                          Sessions.UserId()))))
                    .AccountMenu())));
 }
예제 #3
0
        public static Error.Types OnCreating(SiteSettings ss, DeptModel deptModel)
        {
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(deptModel.Mine());
            foreach (var column in ss.Columns
                     .Where(o => !o.CanCreate)
                     .Where(o => !ss.FormulaTarget(o.ColumnName))
                     .Where(o => !o.Linking))
            {
                switch (column.ColumnName)
                {
                case "DeptCode":
                    if (deptModel.DeptCode_Updated() &&
                        (column.DefaultInput.IsNullOrEmpty() ||
                         column.DefaultInput.ToString() != deptModel.DeptCode))
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "DeptName":
                    if (deptModel.DeptName_Updated() &&
                        (column.DefaultInput.IsNullOrEmpty() ||
                         column.DefaultInput.ToString() != deptModel.DeptName))
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Body":
                    if (deptModel.Body_Updated() &&
                        (column.DefaultInput.IsNullOrEmpty() ||
                         column.DefaultInput.ToString() != deptModel.Body))
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanUpdate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
예제 #4
0
        public static Error.Types OnCreating(SiteSettings ss, GroupModel groupModel)
        {
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(groupModel.Mine());
            foreach (var column in ss.Columns
                     .Where(o => !o.CanCreate)
                     .Where(o => !ss.FormulaTarget(o.ColumnName))
                     .Where(o => !o.Linking))
            {
                switch (column.ColumnName)
                {
                case "TenantId":
                    if (groupModel.TenantId_Updated(column))
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "GroupName":
                    if (groupModel.GroupName_Updated(column))
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Body":
                    if (groupModel.Body_Updated(column))
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanUpdate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
예제 #5
0
        public static Error.Types OnCreating(SiteSettings ss, GroupModel groupModel)
        {
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(groupModel.Mine());
            foreach (var controlId in Forms.Keys())
            {
                switch (controlId)
                {
                case "Groups_TenantId":
                    if (!ss.GetColumn("TenantId").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Groups_GroupName":
                    if (!ss.GetColumn("GroupName").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Groups_Body":
                    if (!ss.GetColumn("Body").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
예제 #6
0
        public static Error.Types OnEditing(SiteSettings ss, DeptModel deptModel)
        {
            switch (deptModel.MethodType)
            {
            case BaseModel.MethodTypes.Edit:
                return
                    (ss.CanRead() &&
                     deptModel.AccessStatus != Databases.AccessStatuses.NotFound
                            ? Error.Types.None
                            : Error.Types.NotFound);

            case BaseModel.MethodTypes.New:
                return(ss.CanCreate()
                        ? Error.Types.None
                        : Error.Types.HasNotPermission);

            default:
                return(Error.Types.NotFound);
            }
        }
예제 #7
0
        public static Error.Types OnCreating(SiteSettings ss, WikiModel wikiModel)
        {
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(wikiModel.Mine());
            foreach (var column in ss.Columns
                     .Where(o => !o.CanCreate)
                     .Where(o => !ss.FormulaTarget(o.ColumnName)))
            {
                switch (column.ColumnName)
                {
                case "Title":
                    if (wikiModel.Title_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Body":
                    if (wikiModel.Body_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanUpdate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
예제 #8
0
        public static Error.Types OnEditing(SiteSettings ss, UserModel userModel)
        {
            if (!DefinitionAccessor.Parameters.Service.ShowProfiles)
            {
                return(Error.Types.InvalidRequest);
            }
            switch (userModel.MethodType)
            {
            case BaseModel.MethodTypes.Edit:
                return
                    (ss.CanRead() &&
                     userModel.AccessStatus != Databases.AccessStatuses.NotFound
                            ? Error.Types.None
                            : Error.Types.NotFound);

            case BaseModel.MethodTypes.New:
                return(ss.CanCreate()
                        ? Error.Types.None
                        : Error.Types.HasNotPermission);

            default:
                return(Error.Types.NotFound);
            }
        }
예제 #9
0
        public static Error.Types OnCreating(SiteSettings ss, UserModel userModel)
        {
            if (!DefinitionAccessor.Parameters.Service.ShowProfiles)
            {
                return(Error.Types.InvalidRequest);
            }
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(userModel.Mine());
            foreach (var controlId in Forms.Keys())
            {
                switch (controlId)
                {
                case "Users_LoginId":
                    if (!ss.GetColumn("LoginId").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_GlobalId":
                    if (!ss.GetColumn("GlobalId").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Name":
                    if (!ss.GetColumn("Name").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_UserCode":
                    if (!ss.GetColumn("UserCode").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Password":
                    if (!ss.GetColumn("Password").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_LastName":
                    if (!ss.GetColumn("LastName").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_FirstName":
                    if (!ss.GetColumn("FirstName").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Birthday":
                    if (!ss.GetColumn("Birthday").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Gender":
                    if (!ss.GetColumn("Gender").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Language":
                    if (!ss.GetColumn("Language").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_TimeZone":
                    if (!ss.GetColumn("TimeZone").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_DeptId":
                    if (!ss.GetColumn("DeptId").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_FirstAndLastNameOrder":
                    if (!ss.GetColumn("FirstAndLastNameOrder").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Body":
                    if (!ss.GetColumn("Body").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_LastLoginTime":
                    if (!ss.GetColumn("LastLoginTime").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_PasswordExpirationTime":
                    if (!ss.GetColumn("PasswordExpirationTime").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_PasswordChangeTime":
                    if (!ss.GetColumn("PasswordChangeTime").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_NumberOfLogins":
                    if (!ss.GetColumn("NumberOfLogins").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_NumberOfDenial":
                    if (!ss.GetColumn("NumberOfDenial").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_TenantManager":
                    if (!ss.GetColumn("TenantManager").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_Disabled":
                    if (!ss.GetColumn("Disabled").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Users_ApiKey":
                    if (!ss.GetColumn("ApiKey").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanCreate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
예제 #10
0
        public static HtmlBuilder MainCommands(
            this HtmlBuilder hb,
            SiteSettings ss,
            long siteId,
            Versions.VerTypes verType,
            long referenceId  = 0,
            bool backButton   = true,
            bool updateButton = false,
            bool copyButton   = false,
            bool moveButton   = false,
            bool mailButton   = false,
            bool deleteButton = false,
            Action extensions = null)
        {
            return(hb.Div(id: "MainCommandsContainer", action: () => hb
                          .Div(id: "MainCommands", action: () =>
            {
                if (backButton)
                {
                    hb.Button(
                        controlId: "GoBack",
                        text: Displays.GoBack(),
                        controlCss: "button-icon",
                        accessKey: "q",
                        onClick: "$p.back();",
                        icon: "ui-icon-circle-arrow-w");
                }
                if (Routes.Action() == "new")
                {
                    hb.Button(
                        text: Displays.Create(),
                        controlCss: "button-icon validate",
                        accessKey: "s",
                        onClick: "$p.send($(this));",
                        icon: "ui-icon-disk",
                        action: "Create",
                        method: "post");
                }
                else if (ss.CanRead() && verType == Versions.VerTypes.Latest)
                {
                    hb
                    .Button(
                        text: Displays.Update(),
                        controlCss: "button-icon validate",
                        accessKey: "s",
                        onClick: "$p.send($(this));",
                        icon: "ui-icon-disk",
                        action: "Update",
                        method: "put",
                        _using: updateButton && ss.CanUpdate())
                    .Button(
                        text: Displays.Copy(),
                        controlCss: "button-icon open-dialog",
                        accessKey: "c",
                        onClick: "$p.openDialog($(this));",
                        icon: "ui-icon-copy",
                        selector: "#CopyDialog",
                        _using: copyButton && ss.CanCreate())
                    .Button(
                        text: Displays.Move(),
                        controlCss: "button-icon open-dialog",
                        accessKey: "o",
                        onClick: "$p.moveTargets($(this));",
                        icon: "ui-icon-transferthick-e-w",
                        selector: "#MoveDialog",
                        action: "MoveTargets",
                        method: "get",
                        _using: moveButton && ss.CanUpdate())
                    .Button(
                        controlId: "EditOutgoingMail",
                        text: Displays.Mail(),
                        controlCss: "button-icon",
                        onClick: "$p.openOutgoingMailDialog($(this));",
                        icon: "ui-icon-mail-closed",
                        action: "Edit",
                        method: "put",
                        accessKey: "m",
                        _using: mailButton && ss.CanSendMail())
                    .Button(
                        text: Displays.Delete(),
                        controlCss: "button-icon",
                        accessKey: "r",
                        onClick: "$p.send($(this));",
                        icon: "ui-icon-trash",
                        action: "Delete",
                        method: "delete",
                        confirm: "ConfirmDelete",
                        _using: deleteButton && ss.CanDelete() && !ss.IsSite())
                    .Button(
                        text: Displays.DeleteSite(),
                        controlCss: "button-icon",
                        accessKey: "r",
                        onClick: "$p.openDeleteSiteDialog($(this));",
                        icon: "ui-icon-trash",
                        _using: deleteButton && ss.CanDelete() && ss.IsSite());
                    if (Routes.Controller() == "items" && ss.ReferenceType != "Sites")
                    {
                        switch (Routes.Action())
                        {
                        case "index":
                            hb
                            .Button(
                                text: Displays.BulkMove(),
                                controlCss: "button-icon open-dialog",
                                accessKey: "o",
                                onClick: "$p.moveTargets($(this));",
                                icon: "ui-icon-transferthick-e-w",
                                selector: "#MoveDialog",
                                action: "MoveTargets",
                                method: "get",
                                _using: ss.CanUpdate())
                            .Button(
                                text: Displays.BulkDelete(),
                                controlCss: "button-icon",
                                accessKey: "r",
                                onClick: "$p.send($(this));",
                                icon: "ui-icon-trash",
                                action: "BulkDelete",
                                method: "delete",
                                confirm: "ConfirmDelete",
                                _using: ss.CanDelete())
                            .Button(
                                controlId: "EditImportSettings",
                                text: Displays.Import(),
                                controlCss: "button-icon",
                                accessKey: "w",
                                onClick: "$p.openImportSettingsDialog($(this));",
                                icon: "ui-icon-arrowreturnthick-1-e",
                                selector: "#ImportSettingsDialog",
                                _using: ss.CanImport())
                            .Button(
                                text: Displays.Export(),
                                controlCss: "button-icon",
                                accessKey: "x",
                                onClick: "$p.openExportSelectorDialog($(this));",
                                icon: "ui-icon-arrowreturnthick-1-w",
                                action: "OpenExportSelectorDialog",
                                method: "post",
                                _using: ss.CanExport());
                            break;

                        case "crosstab":
                            hb.Button(
                                text: Displays.Export(),
                                controlCss: "button-icon",
                                accessKey: "x",
                                onClick: "$p.exportCrosstab();",
                                icon: "ui-icon-arrowreturnthick-1-w",
                                _using: ss.CanExport());
                            break;
                        }
                    }
                }
                extensions?.Invoke();
            })));
        }
예제 #11
0
        public static Error.Types OnCreating(SiteSettings ss, UserModel userModel)
        {
            if (!DefinitionAccessor.Parameters.Service.ShowProfiles)
            {
                return(Error.Types.InvalidRequest);
            }
            if (!ss.CanCreate())
            {
                return(Error.Types.HasNotPermission);
            }
            ss.SetColumnAccessControls(userModel.Mine());
            foreach (var column in ss.Columns
                     .Where(o => !o.CanCreate)
                     .Where(o => !ss.FormulaTarget(o.ColumnName)))
            {
                switch (column.ColumnName)
                {
                case "LoginId":
                    if (userModel.LoginId_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "GlobalId":
                    if (userModel.GlobalId_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Name":
                    if (userModel.Name_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "UserCode":
                    if (userModel.UserCode_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Password":
                    if (userModel.Password_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "LastName":
                    if (userModel.LastName_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "FirstName":
                    if (userModel.FirstName_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Birthday":
                    if (userModel.Birthday_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Gender":
                    if (userModel.Gender_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Language":
                    if (userModel.Language_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "TimeZone":
                    if (userModel.TimeZone_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "DeptId":
                    if (userModel.DeptId_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "FirstAndLastNameOrder":
                    if (userModel.FirstAndLastNameOrder_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Body":
                    if (userModel.Body_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "LastLoginTime":
                    if (userModel.LastLoginTime_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "PasswordExpirationTime":
                    if (userModel.PasswordExpirationTime_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "PasswordChangeTime":
                    if (userModel.PasswordChangeTime_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "NumberOfLogins":
                    if (userModel.NumberOfLogins_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "NumberOfDenial":
                    if (userModel.NumberOfDenial_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "TenantManager":
                    if (userModel.TenantManager_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Disabled":
                    if (userModel.Disabled_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "ApiKey":
                    if (userModel.ApiKey_Updated())
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;

                case "Comments":
                    if (!ss.GetColumn("Comments").CanUpdate)
                    {
                        return(Error.Types.HasNotPermission);
                    }
                    break;
                }
            }
            return(Error.Types.None);
        }
        private static HtmlBuilder NavigationMenu(
            this HtmlBuilder hb,
            SiteSettings ss,
            long siteId,
            string referenceType,
            bool useNavigationMenu)
        {
            var canManageGroups = Sessions.UserSettings().DisableGroupAdmin != true;
            var canManageSite   = siteId != 0 && ss.CanManageSite(site: true);
            var canManageDepts  = Permissions.CanManageTenant();
            var canManageUsers  = Permissions.CanManageTenant();

            return(hb.Ul(
                       id: "NavigationMenu",
                       action: () => hb
                       .Li(
                           action: () => hb
                           .Div(action: () => hb
                                .A(
                                    href: NewHref(ss),
                                    attributes: SiteIndex(ss)
                                        ? new HtmlAttributes()
                                    .OnClick("$p.templates($(this));")
                                    .DataAction("Templates")
                                    .DataMethod("post")
                                        : null,
                                    action: () => hb
                                    .Span(css: "ui-icon ui-icon-plus")
                                    .Text(text: Displays.New()))),
                           _using: ss.ReferenceType == "Sites" && Routes.Action() == "index"
                            ? ss.CanManageSite()
                            : ss.CanCreate() && ss.ReferenceType != "Wikis")
                       .Li(
                           css: "sub-menu",
                           action: () => hb
                           .Div(
                               attributes: new HtmlAttributes().DataId("ViewModeMenu"),
                               action: () => hb
                               .Span(css: "ui-icon ui-icon-triangle-1-e")
                               .Text(text: Displays.View()))
                           .ViewModeMenu(ss: ss),
                           _using: Def.ViewModeDefinitionCollection
                           .Any(o => o.ReferenceType == referenceType))
                       .Li(
                           css: "sub-menu",
                           action: () => hb
                           .Div(
                               attributes: new HtmlAttributes().DataId("SettingsMenu"),
                               action: () => hb
                               .Span(css: "ui-icon ui-icon-gear")
                               .Text(text: Displays.Manage()))
                           .SettingsMenu(
                               ss: ss,
                               siteId: siteId,
                               canManageSite: canManageSite,
                               canManageDepts: canManageDepts,
                               canManageGroups: canManageGroups,
                               canManageUsers: canManageUsers),
                           _using:
                           canManageSite ||
                           canManageDepts ||
                           canManageGroups ||
                           canManageUsers)
                       .Li(
                           css: "sub-menu",
                           action: () => hb
                           .Div(
                               attributes: new HtmlAttributes().DataId("AccountMenu"),
                               action: () => hb
                               .Span(css: "ui-icon ui-icon-person")
                               .Text(text: SiteInfo.UserName((
                                                                 Sessions.UserId()))))
                           .AccountMenu())));
        }