Skip to content

Commit

Permalink
Fixes #20264: Allow to customize in which menu plugins are set
Browse files Browse the repository at this point in the history
  • Loading branch information
VinceMacBuche committed Nov 16, 2021
1 parent ddd3220 commit 55252d2
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 24 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("1 - Nodes", <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("1 - list", <span>Nodes</span>) /
"secure" / "nodeManager" / "nodes"
>> LocGroup("nodeGroup")

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

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

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

, Menu("Groups", <span>Groups</span>) /
, Menu("5 - groups", <span>Groups</span>) /
"secure" / "nodeManager" / "groups"
>> LocGroup("groupGroup")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Group.Read ) )
Expand All @@ -386,64 +386,64 @@ 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("2 - configuration", <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("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("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("rule Category Details", <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("directives", <span>Directives</span>) /
"secure" / (name+"Manager") / "directiveManagement"
>> LocGroup(name+"Group")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Directive.Read ) )

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

, Menu("Technique", <span>Technique</span>) /
, Menu("technique", <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("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("6 - administration", <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("setup", <span>Setup</span>) /
"secure" / "administration" / "setup"
>> LocGroup("administrationGroup")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Administration.Read ) )

, Menu("policyServerManagement", <span>Settings</span>) /
, Menu("settings", <span>Settings</span>) /
"secure" / "administration" / "policyServerManagement"
>> LocGroup("administrationGroup")
>> TestAccess ( () => userIsAllowed("/secure/index",AuthorizationType.Administration.Read) )
Expand All @@ -453,7 +453,7 @@ class Boot extends Loggable {
>> LocGroup("administrationGroup")
>> TestAccess ( () => userIsAllowed("/secure/administration/policyServerManagement",AuthorizationType.Administration.Read) )

, Menu("TechniqueLibraryManagement", <span>Techniques tree</span>) /
, Menu("techniqueLibraryManagement", <span>Techniques tree</span>) /
"secure" / "administration" / "techniqueLibraryManagement"
>> LocGroup("administrationGroup")
>> TestAccess( () => userIsAllowed("/secure/index",AuthorizationType.Technique.Read ) )
Expand All @@ -465,7 +465,7 @@ class Boot extends Loggable {
)

def pluginsMenu = {
(Menu("PluginsHome", <i class="fa fa-puzzle-piece"></i> ++ <span>Plugins</span> ++ <span data-lift="PluginExpirationInfo.renderIcon"></span>: NodeSeq) /
(Menu("8 - plugins", <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)
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("4 - utilities", <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 @@ -507,7 +507,7 @@ class Boot extends Loggable {
}

val rootMenu = List(
Menu("Dashboard", <i class="fa fa-dashboard"></i> ++ <span>Dashboard</span>: NodeSeq) / "secure" / "index"
Menu("0 - 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
, nodeManagerMenu
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,26 @@ 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):_* )
val (parentName, updatedMenu) = pluginMenuParent match {
case None => ("9 - plugins", menus)
case Some(parentMenu) =>
val name = parentMenu.loc.name
val menu = if (menus.exists (_.loc.name == name )) {
menus
} else {
(parentMenu :: menus).sortBy(_.loc.name)
}
(name,menu)
}
updatedMenu.map {
case m@Menu(l, _* ) if(l.name == parentName) =>
Menu(l , (m.kids :+ menu).sortBy(_.loc.name):_* )
case m => m
}
}
Expand Down

0 comments on commit 55252d2

Please sign in to comment.