Skip to content

Commit

Permalink
Merge branch 'ust_20264/allow_to_customize_in_which_menu_plugins_are_…
Browse files Browse the repository at this point in the history
…set_pr' into branches/rudder/7.0
  • Loading branch information
fanf committed Nov 18, 2021
2 parents ead2df4 + 6ed61e4 commit 5dd27ed
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -356,28 +356,28 @@ class Boot extends Loggable {

// All the following is related to the sitemap
val nodeManagerMenu =
(Menu("NodeManagerHome", <i class="fa fa-sitemap"></i> ++ <span>Node management</span>: NodeSeq) /
(Menu(MenuUtils.nodeManagementMenu, <i class="fa fa-sitemap"></i> ++ <span>Node management</span>: NodeSeq) /
"secure" / "nodeManager" / "index" >> TestAccess( ()
=> userIsAllowed("/secure/index",AuthorizationType.Node.Read) )).submenus (

Menu("List Nodes", <span>Nodes</span>) /
Menu("110-nodes", <span>Nodes</span>) /
"secure" / "nodeManager" / "nodes"
>> LocGroup("nodeGroup")

, Menu("SearchNodes", <span>Node search</span>) /
, Menu("120-search-nodes", <span>Node search</span>) /
"secure" / "nodeManager" / "searchNodes"
>> LocGroup("nodeGroup")

, Menu("NodeDetails", <span>Node details</span>) /
, Menu("120-node-details", <span>Node details</span>) /
"secure" / "nodeManager" / "node"
>> LocGroup("nodeGroup")
>> Hidden

, Menu("ManageNewNode", <span>Pending nodes</span>) /
, Menu("130-pending-nodes", <span>Pending nodes</span>) /
"secure" / "nodeManager" / "manageNewNode"
>> LocGroup("nodeGroup")

, Menu("Groups", <span>Groups</span>) /
, Menu("140-groups", <span>Groups</span>) /
"secure" / "nodeManager" / "groups"
>> LocGroup("groupGroup")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Group.Read ) )
Expand All @@ -386,91 +386,91 @@ class Boot extends Loggable {

def policyMenu = {
val name = "configuration"
(Menu(name+"ManagerHome", <i class="fa fa-pencil"></i> ++ <span>{name.capitalize} policy</span>: NodeSeq) /
(Menu(MenuUtils.policyMenu, <i class="fa fa-pencil"></i> ++ <span>{name.capitalize} policy</span>: NodeSeq) /
"secure" / (name+"Manager") / "index" >> TestAccess ( ()
=> userIsAllowed("/secure/index",AuthorizationType.Configuration.Read) )).submenus (

Menu(name+"RuleManagement", <span>Rules</span>) /
Menu("210-rules", <span>Rules</span>) /
"secure" / (name+"Manager") / "ruleManagement"
>> LocGroup(name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Rule.Read ) )

, Menu("Rule Details", <span>Rule</span>) /
, Menu("210-rule-details", <span>Rule</span>) /
"secure" / (name+"Manager") / "ruleManagement" / "rule" / *
>> TemplateBox {case _ => Templates("secure" :: (name+"Manager") :: "ruleManagement" :: Nil)}
>> LocGroup (name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index", AuthorizationType.Rule.Read) )
>> Hidden

, Menu("Rule Category Details", <span>Rule Category</span>) /
, Menu("210-rule-category", <span>Rule Category</span>) /
"secure" / (name+"Manager") / "ruleManagement" / "ruleCategory" / *
>> TemplateBox {case _ => Templates("secure" :: (name+"Manager") :: "ruleManagement" :: Nil)}
>> LocGroup (name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Rule.Read ) )
>> Hidden

,Menu(name+"DirectiveManagement", <span>Directives</span>) /
,Menu("220-directives", <span>Directives</span>) /
"secure" / (name+"Manager") / "directiveManagement"
>> LocGroup(name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Directive.Read ) )

, Menu("techniqueEditor", <span>Techniques</span>) /
, Menu("230-techniques", <span>Techniques</span>) /
"secure" / (name+"Manager") / "techniqueEditor"
>> LocGroup((name+"Manager"))
>> TestAccess ( () => userIsAllowed("/secure/index",AuthorizationType.Technique.Read))

, Menu("Technique", <span>Technique</span>) /
, Menu("230-technique-details", <span>Technique</span>) /
"secure" / (name+"Manager") / "techniqueEditor" / "technique" / *
>> TemplateBox {case _ => Templates("secure" :: (name+"Manager") :: "techniqueEditor" :: Nil)}
>> LocGroup (name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index", AuthorizationType.Rule.Read) )
>> Hidden

, Menu(name+"ParameterManagement", <span>Parameters</span>) /
, Menu("240-global-parameters", <span>Parameters</span>) /
"secure" / (name+"Manager") / "parameterManagement"
>> LocGroup(name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Parameter.Read ) )
)
}

def administrationMenu =
(Menu("AdministrationHome", <i class="fa fa-gear"></i> ++ <span>Administration</span>: NodeSeq) /
(Menu(MenuUtils.administrationMenu, <i class="fa fa-gear"></i> ++ <span>Administration</span>: NodeSeq) /
"secure" / "administration" / "index" >> TestAccess ( ()
=> userIsAllowed("/secure/index",AuthorizationType.Administration.Read, AuthorizationType.Technique.Read) )).submenus (

Menu("Setup", <span>Setup</span>) /
Menu("710-setup", <span>Setup</span>) /
"secure" / "administration" / "setup"
>> LocGroup("administrationGroup")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Administration.Read ) )

, Menu("policyServerManagement", <span>Settings</span>) /
, Menu("720-settings", <span>Settings</span>) /
"secure" / "administration" / "policyServerManagement"
>> LocGroup("administrationGroup")
>> TestAccess ( () => userIsAllowed("/secure/index",AuthorizationType.Administration.Read) )

, Menu("databaseManagement", <span>Reports database</span>) /
, Menu("730-database", <span>Reports database</span>) /
"secure" / "administration" / "databaseManagement"
>> LocGroup("administrationGroup")
>> TestAccess ( () => userIsAllowed("/secure/administration/policyServerManagement",AuthorizationType.Administration.Read) )

, Menu("TechniqueLibraryManagement", <span>Techniques tree</span>) /
, Menu("740-techniques-tree", <span>Techniques tree</span>) /
"secure" / "administration" / "techniqueLibraryManagement"
>> LocGroup("administrationGroup")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Technique.Read ) )

, Menu("apiManagement", <span>API accounts</span>) /
, Menu("750-api", <span>API accounts</span>) /
"secure" / "administration" / "apiManagement"
>> LocGroup("administrationGroup")
>> TestAccess ( () => userIsAllowed("/secure/administration/policyServerManagement",AuthorizationType.Administration.Write) )
)

def pluginsMenu = {
(Menu("PluginsHome", <i class="fa fa-puzzle-piece"></i> ++ <span>Plugins</span> ++ <span data-lift="PluginExpirationInfo.renderIcon"></span>: NodeSeq) /
(Menu(MenuUtils.pluginsMenu, <i class="fa fa-puzzle-piece"></i> ++ <span>Plugins</span> ++ <span data-lift="PluginExpirationInfo.renderIcon"></span>: NodeSeq) /
"secure" / "plugins" / "index"
>> LocGroup("pluginsGroup")
>> TestAccess ( () => userIsAllowed("/secure/index", AuthorizationType.Administration.Read)
)) submenus (
Menu("pluginInformation", <span>Plugin information</span>) /
Menu("910-plugins", <span>Plugin information</span>) /
"secure" / "plugins" / "pluginInformation"
>> LocGroup("pluginsGroup")
>> TestAccess ( () => userIsAllowed("/secure/index", AuthorizationType.Administration.Read) )
Expand All @@ -481,7 +481,7 @@ class Boot extends Loggable {
// if we can't get the workflow property, default to false
// (don't give rights if you don't know)
def workflowEnabled = RudderConfig.configService.rudder_workflow_enabled().either.runNow.getOrElse(false)
(Menu("UtilitiesHome", <i class="fa fa-wrench"></i> ++ <span>Utilities</span>: NodeSeq) /
(Menu(MenuUtils.utilitiesMenu, <i class="fa fa-wrench"></i> ++ <span>Utilities</span>: NodeSeq) /
"secure" / "utilities" / "index" >>
TestAccess ( () =>
if ((workflowEnabled && (CurrentUser.checkRights(AuthorizationType.Validator.Read) || CurrentUser.checkRights(AuthorizationType.Deployer.Read))) || CurrentUser.checkRights(AuthorizationType.Administration.Read) || CurrentUser.checkRights(AuthorizationType.Technique.Read))
Expand All @@ -490,26 +490,26 @@ class Boot extends Loggable {
Full(RedirectWithState("/secure/index", redirection))
)).submenus (

Menu("archivesManagement", <span>Archives</span>) /
Menu("610-archives", <span>Archives</span>) /
"secure" / "utilities" / "archiveManagement"
>> LocGroup("utilitiesGroup")
>> TestAccess ( () => userIsAllowed("/secure/utilities/eventLogs",AuthorizationType.Administration.Write) )

, Menu("eventLogViewer", <span>Event logs</span>) /
, Menu("620-event-logs", <span>Event logs</span>) /
"secure" / "utilities" / "eventLogs"
>> LocGroup("utilitiesGroup")
>> TestAccess ( () => userIsAllowed("/secure/index",AuthorizationType.Administration.Read) )
, Menu("healthCheckHome", <span>Health check</span>) /
, Menu("630-health-check", <span>Health check</span>) /
"secure" / "utilities" / "healthcheck"
>> LocGroup("utilitiesGroup")
>> TestAccess ( () => userIsAllowed("/secure/index",AuthorizationType.Administration.Read) )
)
}

val rootMenu = List(
Menu("Dashboard", <i class="fa fa-dashboard"></i> ++ <span>Dashboard</span>: NodeSeq) / "secure" / "index"
, Menu("Login") / "index" >> Hidden
, Menu("Templates") / "templates" / ** >> Hidden //allows access to html file use by js
Menu("000-dashboard", <i class="fa fa-dashboard"></i> ++ <span>Dashboard</span>: NodeSeq) / "secure" / "index"
, Menu("010-login") / "index" >> Hidden
, Menu("020-templates") / "templates" / ** >> Hidden //allows access to html file use by js
, nodeManagerMenu
, policyMenu
, utilitiesMenu
Expand Down Expand Up @@ -626,3 +626,11 @@ class Boot extends Loggable {
pluginDefs
}
}

object MenuUtils {
val nodeManagementMenu = "100-nodes"
val policyMenu = "200-policy"
val administrationMenu = "700-administration"
val utilitiesMenu = "600-utilities"
val pluginsMenu = "900-plugins"
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,6 @@ import com.typesafe.config.ConfigException
import com.typesafe.config.ConfigFactory
import com.unboundid.ldap.sdk.DN
import com.unboundid.ldap.sdk.RDN
import cron4s.expr.CronExpr
import net.liftweb.common.Loggable
import net.liftweb.common._
import org.apache.commons.io.FileUtils
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@

package com.normation.plugins

import bootstrap.liftweb.MenuUtils
import com.normation.rudder.domain.logger.ApplicationLogger
import com.normation.rudder.domain.logger.PluginLogger
import com.typesafe.config.ConfigException
import com.typesafe.config.ConfigFactory
import net.liftweb.sitemap.Menu
Expand Down Expand Up @@ -121,14 +123,33 @@ trait DefaultPluginDef extends RudderPluginDef {
* interaction with Rudder menu (at the risk of breaking it).
*/
def pluginMenuEntry: Option[Menu] = None
def pluginMenuParent: Option[Menu] = None

override def updateSiteMap(menus:List[Menu]) : List[Menu] = {

pluginMenuEntry match {
case None => menus
case Some(menu) =>
menus.map {
case m@Menu(l, _* ) if(l.name == "PluginsHome") =>
Menu(l , (m.kids.toSeq :+ menu):_* )
case Some(menu@Menu(loc,_*)) =>
val (parentName, updatedMenu) = pluginMenuParent match {
case None => (MenuUtils.pluginsMenu, menus)
case Some(parentMenu) =>
val menu = if (menus.exists (_.loc.name == parentMenu.loc.name )) {
menus
} else {
( parentMenu :: menus).sortBy(_.loc.name)
}
(parentMenu.loc.name,menu)
}

updatedMenu.map {
case m@Menu(l, _* ) if(l.name == parentName) =>
// We need to avoid collision on name/loc
if (m.kids.exists (_.loc.name == loc.name)) {
PluginLogger.error(s"There is already a menu with id (${loc.name}, please contact Plugin team")
m
} else {
Menu(l , (m.kids :+ menu).sortBy(_.loc.name):_* )
}
case m => m
}
}
Expand Down

0 comments on commit 5dd27ed

Please sign in to comment.