You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/03/16 16:50:58 UTC

[1/4] syncope git commit: [SYNCOPE-1281] Console support implemented

Repository: syncope
Updated Branches:
  refs/heads/master 3b884e0c1 -> 73f7e0f24


http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
index 4a06ea1..aa9658b 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/SecurityQuestionsITCase.java
@@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.pages.SecurityQuestions;
+import org.apache.syncope.client.console.pages.Security;
 import org.apache.wicket.Component;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
 import org.apache.wicket.markup.html.basic.Label;
@@ -37,42 +37,44 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
     @BeforeEach
     public void login() {
         doLogin(ADMIN_UNAME, ADMIN_PWD);
-        TESTER.clickLink("body:configurationLI:configurationUL:securityquestionsLI:securityquestions");
-        TESTER.assertRenderedPage(SecurityQuestions.class);
+        TESTER.clickLink("body:configurationLI:configurationUL:securityLI:security");
+        TESTER.assertRenderedPage(Security.class);
+        TESTER.clickLink("body:content:tabbedPanel:tabs-container:tabs:3:link");
     }
 
     private void createSecurityQuestion(final String name) {
-        TESTER.clickLink("body:content:securityQuestionPanel:container:content:add");
+        TESTER.clickLink("body:content:tabbedPanel:panel:container:content:add");
 
         TESTER.assertComponent(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer", Modal.class);
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer", Modal.class);
 
         FormTester formTester = TESTER.newFormTester(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:securityQuestionDetailsPanel:container:form:content:textField",
                 name);
 
         TESTER.clickLink(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         TESTER.assertInfoMessages("Operation executed successfully");
         TESTER.cleanupFeedbackMessages();
 
-        TESTER.clickLink("body:configurationLI:configurationUL:securityquestionsLI:securityquestions");
+        TESTER.clickLink("body:configurationLI:configurationUL:securityLI:security");
+        TESTER.clickLink("body:content:tabbedPanel:tabs-container:tabs:3:link");
     }
 
     @Test
     public void read() {
         Label label = (Label) TESTER.getComponentFromLastRenderedPage(
-                "body:content:securityQuestionPanel:container:content:searchContainer:resultTable:"
+                "body:content:tabbedPanel:panel:container:content:searchContainer:resultTable:"
                 + "tablePanel:groupForm:checkgroup:dataTable:body:rows:1:cells:2:cell");
         assertTrue(label.getDefaultModelObjectAsString().startsWith("What's your "));
 
-        TESTER.executeAjaxEvent("body:content:securityQuestionPanel:container:content:searchContainer:resultTable:"
+        TESTER.executeAjaxEvent("body:content:tabbedPanel:panel:container:content:searchContainer:resultTable:"
                 + "tablePanel:groupForm:checkgroup:dataTable:body:rows:1", Constants.ON_CLICK);
 
         TESTER.assertComponent(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:1:outer:container:content:"
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:1:outer:container:content:"
                 + "togglePanelContainer:container:actions:actions:actionRepeater:0:action:action",
                 IndicatingAjaxLink.class);
     }
@@ -85,23 +87,23 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
     @Test
     public void update() {
         createSecurityQuestion("What's your preferred color?");
-        Component result = findComponentByProp("content", "body:content:securityQuestionPanel:container:content:"
+        Component result = findComponentByProp("content", "body:content:tabbedPanel:panel:container:content:"
                 + "searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
                 "What's your preferred color?");
 
         assertNotNull(result);
 
         TESTER.executeAjaxEvent(result.getPageRelativePath(), Constants.ON_CLICK);
-        TESTER.clickLink("body:content:securityQuestionPanel:outerObjectsRepeater:1:outer:container:content:"
+        TESTER.clickLink("body:content:tabbedPanel:panel:outerObjectsRepeater:1:outer:container:content:"
                 + "togglePanelContainer:container:actions:actions:actionRepeater:0:action:action");
 
         FormTester formTester = TESTER.newFormTester(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:form");
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.setValue("content:securityQuestionDetailsPanel:container:form:content:textField",
                 "What's your preferred car?");
 
         TESTER.clickLink(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:inputs:0:submit");
 
         TESTER.assertInfoMessages("Operation executed successfully");
         TESTER.cleanupFeedbackMessages();
@@ -112,25 +114,25 @@ public class SecurityQuestionsITCase extends AbstractConsoleITCase {
         String name = "What's your preferred color?";
         createSecurityQuestion(name);
 
-        Component result = findComponentByProp("content", "body:content:securityQuestionPanel:container:content:"
+        Component result = findComponentByProp("content", "body:content:tabbedPanel:panel:container:content:"
                 + "searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
                 name);
         assertNotNull(result);
 
         TESTER.executeAjaxEvent(result.getPageRelativePath(), Constants.ON_CLICK);
         TESTER.getRequest().addParameter("confirm", "true");
-        TESTER.clickLink("body:content:securityQuestionPanel:outerObjectsRepeater:1:outer:container:content:"
+        TESTER.clickLink("body:content:tabbedPanel:panel:outerObjectsRepeater:1:outer:container:content:"
                 + "togglePanelContainer:container:actions:actions:actionRepeater:1:action:action");
 
         TESTER.executeAjaxEvent(TESTER.getComponentFromLastRenderedPage(
-                "body:content:securityQuestionPanel:outerObjectsRepeater:1:outer:container:content:"
+                "body:content:tabbedPanel:panel:outerObjectsRepeater:1:outer:container:content:"
                 + "togglePanelContainer:container:actions:actions:actionRepeater:1:action:action"), "onclick");
 
         TESTER.assertInfoMessages("Operation executed successfully");
         TESTER.cleanupFeedbackMessages();
 
         assertNull(findComponentByProp("content",
-                "body:content:securityQuestionPanel:container:content:"
+                "body:content:tabbedPanel:panel:container:content:"
                 + "searchContainer:resultTable:"
                 + "tablePanel:groupForm:checkgroup:dataTable", name));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ApplicationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ApplicationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ApplicationITCase.java
index 5cc79b0..74b21be 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ApplicationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ApplicationITCase.java
@@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
-import java.util.Base64;
 import java.util.UUID;
 import java.util.stream.Collectors;
 import javax.ws.rs.core.Response;
@@ -67,20 +66,17 @@ public class ApplicationITCase extends AbstractITCase {
 
         PrivilegeTO privilegeTO = new PrivilegeTO();
         privilegeTO.setKey(UUID.randomUUID().toString());
-        privilegeTO.setSpecMimeType("application/xml");
-        privilegeTO.setSpec(Base64.getEncoder().encodeToString("<one/>".getBytes()));
+        privilegeTO.setSpec("{ \"one\": true }");
         application.getPrivileges().add(privilegeTO);
 
         privilegeTO = new PrivilegeTO();
         privilegeTO.setKey(UUID.randomUUID().toString());
-        privilegeTO.setSpecMimeType("application/xml");
-        privilegeTO.setSpec(Base64.getEncoder().encodeToString("<one><two/></one>".getBytes()));
+        privilegeTO.setSpec("{ \"two\": true }");
         application.getPrivileges().add(privilegeTO);
 
         privilegeTO = new PrivilegeTO();
         privilegeTO.setKey(UUID.randomUUID().toString());
-        privilegeTO.setSpecMimeType("application/xml");
-        privilegeTO.setSpec(Base64.getEncoder().encodeToString("<one><two><three/></two></one>".getBytes()));
+        privilegeTO.setSpec("{ \"three\": true }");
         application.getPrivileges().add(privilegeTO);
 
         Response response = applicationService.create(application);

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/fit/core-reference/src/test/resources/console.properties
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/resources/console.properties b/fit/core-reference/src/test/resources/console.properties
index 43ee365..4d39cf0 100644
--- a/fit/core-reference/src/test/resources/console.properties
+++ b/fit/core-reference/src/test/resources/console.properties
@@ -37,15 +37,15 @@ flowableModelerDirectory=${flowable-modeler.directory}
 
 reconciliationReportKey=c3520ad9-179f-49e7-b315-d684d216dd97
 
-page.administration=org.apache.syncope.client.console.pages.Administration
 page.dashboard=org.apache.syncope.client.console.pages.Dashboard
 page.realms=org.apache.syncope.client.console.pages.Realms
 page.topology=org.apache.syncope.client.console.topology.Topology
 page.reports=org.apache.syncope.client.console.pages.Reports
 page.workflow=org.apache.syncope.client.console.pages.Workflow
 page.audit=org.apache.syncope.client.console.pages.Audit
+page.implementations=org.apache.syncope.client.console.pages.Implementations
 page.logs=org.apache.syncope.client.console.pages.Logs
-page.securityquestions=org.apache.syncope.client.console.pages.SecurityQuestions
+page.security=org.apache.syncope.client.console.pages.Security
 page.types=org.apache.syncope.client.console.pages.Types
 page.policies=org.apache.syncope.client.console.pages.Policies
 page.notifications=org.apache.syncope.client.console.pages.Notifications

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 16c9e8b..d2a711d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -386,7 +386,7 @@ under the License.
 
     <flowable.version>6.2.1</flowable.version>
 
-    <camel.version>2.21.0</camel.version>	
+    <camel.version>2.20.2</camel.version>	
 
     <slf4j.version>1.7.25</slf4j.version>
     <opensaml.version>3.3.0</opensaml.version>
@@ -2209,8 +2209,8 @@ under the License.
             <link>http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/</link>
             <link>http://fasterxml.github.io/jackson-dataformat-yaml/javadoc/2.9.pr1/</link>
             <link>http://fasterxml.github.io/jackson-datatype-joda/javadoc/2.9/</link>
-            <link>http://www.javadoc.io/doc/org.apache.camel/camel-core/2.21.0/</link>
-            <link>http://www.javadoc.io/doc/org.apache.camel/camel-spring/2.21.0/</link>
+            <link>http://www.javadoc.io/doc/org.apache.camel/camel-core/2.20.2/</link>
+            <link>http://www.javadoc.io/doc/org.apache.camel/camel-spring/2.20.2/</link>
             <link>https://ci.apache.org/projects/wicket/apidocs/8.x/</link>
             <link>https://commons.apache.org/proper/commons-lang/javadocs/api-release/</link>
             <link>https://commons.apache.org/proper/commons-io/javadocs/api-2.6/</link>


[3/4] syncope git commit: [SYNCOPE-1281] Console support implemented

Posted by il...@apache.org.
[SYNCOPE-1281] Console support implemented


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/72c5885d
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/72c5885d
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/72c5885d

Branch: refs/heads/master
Commit: 72c5885d989528188c0d7f7c27185f4ea5939fff
Parents: 3b884e0
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Mar 16 17:34:34 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Mar 16 17:34:34 2018 +0100

----------------------------------------------------------------------
 .../client/console/commons/Constants.java       |   4 +
 .../client/console/pages/Administration.java    |  83 ------
 .../syncope/client/console/pages/BasePage.java  |  19 +-
 .../syncope/client/console/pages/Security.java  | 110 ++++++++
 .../client/console/pages/SecurityQuestions.java |  45 ----
 .../panels/ApplicationDirectoryPanel.java       | 266 +++++++++++++++++++
 .../console/panels/ApplicationModalPanel.java   |  91 +++++++
 .../console/panels/DynRealmDirectoryPanel.java  |  28 +-
 .../console/panels/DynRealmModalPanel.java      |   1 -
 .../console/panels/PrivilegeDirectoryPanel.java | 184 +++++++++++++
 .../console/panels/PrivilegeWizardBuilder.java  | 101 +++++++
 .../console/panels/RoleDirectoryPanel.java      |   2 +
 .../console/panels/SecurityQuestionsPanel.java  |   1 +
 .../panels/search/AbstractSearchPanel.java      |  12 +-
 .../console/panels/search/SearchClause.java     |   1 +
 .../panels/search/SearchClausePanel.java        |  23 +-
 .../console/panels/search/SearchUtils.java      |  20 ++
 .../console/panels/search/UserSearchPanel.java  |  16 ++
 .../policies/PolicyRuleDirectoryPanel.java      |   2 +-
 .../console/rest/ApplicationRestClient.java     |  49 ++++
 .../console/widgets/CompletenessWidget.java     |  11 +-
 .../client/console/widgets/NumberWidget.java    |   4 +-
 .../console/wizards/role/RoleWizardBuilder.java |  17 ++
 .../src/main/resources/console.properties       |   3 +-
 .../SyncopeConsoleApplication.properties        |   3 +-
 .../SyncopeConsoleApplication_it.properties     |   3 +-
 .../SyncopeConsoleApplication_ja.properties     |   3 +-
 .../SyncopeConsoleApplication_pt_BR.properties  |   3 +-
 .../SyncopeConsoleApplication_ru.properties     |   3 +-
 .../client/console/pages/Administration.html    |  36 ---
 .../console/pages/Administration.properties     |  18 --
 .../console/pages/Administration_it.properties  |  18 --
 .../console/pages/Administration_ja.properties  |  18 --
 .../pages/Administration_pt_BR.properties       |  18 --
 .../console/pages/Administration_ru.properties  |  20 --
 .../syncope/client/console/pages/BasePage.html  |   3 +-
 .../syncope/client/console/pages/Security.html  |  36 +++
 .../client/console/pages/Security.properties    |  21 ++
 .../client/console/pages/SecurityQuestions.html |  36 ---
 .../console/pages/SecurityQuestions.properties  |  18 --
 .../pages/SecurityQuestions_it.properties       |  18 --
 .../pages/SecurityQuestions_ja.properties       |  18 --
 .../pages/SecurityQuestions_pt_BR.properties    |  18 --
 .../pages/SecurityQuestions_ru.properties       |  20 --
 .../client/console/pages/Security_it.properties |  21 ++
 .../client/console/pages/Security_ja.properties |  21 ++
 .../console/pages/Security_pt_BR.properties     |  21 ++
 .../client/console/pages/Security_ru.properties |  22 ++
 .../panels/ApplicationDirectoryPanel.properties |  21 ++
 .../ApplicationDirectoryPanel_it.properties     |  21 ++
 .../ApplicationDirectoryPanel_ja.properties     |  21 ++
 .../ApplicationDirectoryPanel_pt_BR.properties  |  21 ++
 .../ApplicationDirectoryPanel_ru.properties     |  22 ++
 .../console/panels/ApplicationModalPanel.html   |  26 ++
 .../panels/PrivilegeDirectoryPanel.properties   |  18 ++
 .../PrivilegeDirectoryPanel_it.properties       |  18 ++
 .../PrivilegeDirectoryPanel_ja.properties       |  18 ++
 .../PrivilegeDirectoryPanel_pt_BR.properties    |  18 ++
 .../PrivilegeDirectoryPanel_ru.properties       |  18 ++
 .../panels/PrivilegeWizardBuilder$Profile.html  |  26 ++
 .../panels/PrivilegeWizardBuilder$Spec.html     |  25 ++
 .../panels/SecurityQuestionsPanel.properties    |   1 +
 .../panels/SecurityQuestionsPanel_it.properties |   1 +
 .../panels/SecurityQuestionsPanel_ja.properties |   1 +
 .../SecurityQuestionsPanel_pt_BR.properties     |   1 +
 .../panels/SecurityQuestionsPanel_ru.properties |   3 +-
 .../wizards/role/RoleWizardBuilder$Details.html |  15 +-
 .../role/RoleWizardBuilder$DynRealms.html       |  13 +-
 .../role/RoleWizardBuilder$Entitlements.html    |  13 +-
 .../role/RoleWizardBuilder$Privileges.html      |  25 ++
 .../wizards/role/RoleWizardBuilder$Realms.html  |  13 +-
 .../syncope/common/lib/to/PrivilegeTO.java      |  10 -
 .../core/persistence/api/entity/Privilege.java  |   8 +-
 .../persistence/jpa/entity/JPAPrivilege.java    |  23 +-
 .../persistence/jpa/inner/ApplicationTest.java  |   9 +-
 .../test/resources/domains/MasterContent.xml    |   6 +-
 .../java/data/ApplicationDataBinderImpl.java    |   7 +-
 .../src/main/resources/console.properties       |   4 +-
 .../syncope/fit/console/AjaxBrowseITCase.java   |  10 +-
 .../apache/syncope/fit/console/RolesITCase.java |  11 +-
 .../fit/console/SecurityQuestionsITCase.java    |  40 +--
 .../syncope/fit/core/ApplicationITCase.java     |  10 +-
 .../src/test/resources/console.properties       |   4 +-
 pom.xml                                         |   6 +-
 84 files changed, 1455 insertions(+), 561 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
index c71fdbc..e0f70c4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
@@ -109,6 +109,10 @@ public final class Constants {
 
     public static final String PREF_ROLE_PAGINATOR_ROWS = "role.paginator.rows";
 
+    public static final String PREF_APPLICATION_PAGINATOR_ROWS = "application.paginator.rows";
+
+    public static final String PREF_PRIVILEGE_PAGINATOR_ROWS = "privilege.paginator.rows";
+
     public static final String PREF_DYNREALM_PAGINATOR_ROWS = "dynRealm.paginator.rows";
 
     public static final String PREF_ACCESS_TOKEN_PAGINATOR_ROWS = "accessToken.paginator.rows";

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/pages/Administration.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Administration.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Administration.java
deleted file mode 100644
index 6f4423f..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Administration.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.pages;
-
-import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.panels.DynRealmDirectoryPanel;
-import org.apache.syncope.client.console.panels.RoleDirectoryPanel;
-import org.apache.syncope.client.console.wizards.role.RoleWizardBuilder;
-import org.apache.syncope.common.lib.to.RoleTO;
-import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
-import org.apache.wicket.extensions.markup.html.tabs.ITab;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.ResourceModel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-public class Administration extends BasePage {
-
-    private static final long serialVersionUID = -1100228004207271271L;
-
-    public Administration(final PageParameters parameters) {
-        super(parameters);
-
-        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
-        WebMarkupContainer content = new WebMarkupContainer("content");
-        content.setOutputMarkupId(true);
-        content.setMarkupId("administration");
-        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
-        body.add(content);
-    }
-
-    private List<ITab> buildTabList() {
-        final List<ITab> tabs = new ArrayList<>();
-
-        tabs.add(new AbstractTab(new ResourceModel("roles")) {
-
-            private static final long serialVersionUID = -6815067322125799251L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new RoleDirectoryPanel.Builder(getPageReference()) {
-
-                    private static final long serialVersionUID = -5960765294082359003L;
-
-                }.addNewItemPanelBuilder(new RoleWizardBuilder(new RoleTO(), getPageReference()), true).build(panelId);
-            }
-        });
-
-        tabs.add(new AbstractTab(new ResourceModel("dynRealms")) {
-
-            private static final long serialVersionUID = -6815067322125799251L;
-
-            @Override
-            public Panel getPanel(final String panelId) {
-                return new DynRealmDirectoryPanel.Builder(getPageReference()) {
-
-                    private static final long serialVersionUID = -5960765294082359003L;
-
-                }.build(panelId);
-            }
-        });
-        return tabs;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index ebb14f2..9aa8fa1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -207,26 +207,19 @@ public class BasePage extends WebPage implements IAjaxIndicatorAware {
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, StandardEntitlement.LOG_LIST);
         liContainer.add(link);
 
-        liContainer = new WebMarkupContainer(getLIContainerId("securityquestions"));
-        confULContainer.add(liContainer);
-        bld = new StringBuilder();
-        bld.append(StandardEntitlement.SECURITY_QUESTION_CREATE).append(",").
-                append(StandardEntitlement.SECURITY_QUESTION_DELETE).append(",").
-                append(StandardEntitlement.SECURITY_QUESTION_UPDATE);
-        link = BookmarkablePageLinkBuilder.build("securityquestions", SecurityQuestions.class);
-        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, bld.toString());
-        liContainer.add(link);
-
         liContainer = new WebMarkupContainer(getLIContainerId("types"));
         confULContainer.add(liContainer);
         link = BookmarkablePageLinkBuilder.build("types", Types.class);
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, StandardEntitlement.SCHEMA_LIST);
         liContainer.add(link);
 
-        liContainer = new WebMarkupContainer(getLIContainerId("administration"));
+        liContainer = new WebMarkupContainer(getLIContainerId("security"));
         confULContainer.add(liContainer);
-        link = BookmarkablePageLinkBuilder.build("administration", Administration.class);
-        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, StandardEntitlement.ROLE_LIST);
+        link = BookmarkablePageLinkBuilder.build("security", Security.class);
+        bld = new StringBuilder();
+        bld.append(StandardEntitlement.ROLE_LIST).append(",").
+                append(StandardEntitlement.APPLICATION_LIST);
+        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.RENDER, bld.toString());
         liContainer.add(link);
 
         liContainer = new WebMarkupContainer(getLIContainerId("policies"));

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/pages/Security.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Security.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Security.java
new file mode 100644
index 0000000..56efb31
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Security.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.pages;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.panels.ApplicationDirectoryPanel;
+import org.apache.syncope.client.console.panels.DynRealmDirectoryPanel;
+import org.apache.syncope.client.console.panels.RoleDirectoryPanel;
+import org.apache.syncope.client.console.panels.SecurityQuestionsPanel;
+import org.apache.syncope.client.console.wizards.role.RoleWizardBuilder;
+import org.apache.syncope.common.lib.to.RoleTO;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class Security extends BasePage {
+
+    private static final long serialVersionUID = -1100228004207271271L;
+
+    public Security(final PageParameters parameters) {
+        super(parameters);
+
+        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
+        WebMarkupContainer content = new WebMarkupContainer("content");
+        content.setOutputMarkupId(true);
+        content.setMarkupId("security");
+        content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
+        body.add(content);
+    }
+
+    private List<ITab> buildTabList() {
+        final List<ITab> tabs = new ArrayList<>();
+
+        tabs.add(new AbstractTab(new ResourceModel("roles")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new RoleDirectoryPanel.Builder(getPageReference()) {
+
+                    private static final long serialVersionUID = -5960765294082359003L;
+
+                }.addNewItemPanelBuilder(new RoleWizardBuilder(new RoleTO(), getPageReference()), true).build(panelId);
+            }
+        });
+
+        tabs.add(new AbstractTab(new ResourceModel("dynRealms")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new DynRealmDirectoryPanel.Builder(getPageReference()) {
+
+                    private static final long serialVersionUID = -5960765294082359003L;
+
+                }.build(panelId);
+            }
+        });
+
+        tabs.add(new AbstractTab(new ResourceModel("applications")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new ApplicationDirectoryPanel.Builder(getPageReference()) {
+
+                    private static final long serialVersionUID = -5960765294082359003L;
+
+                }.build(panelId);
+            }
+        });
+
+        tabs.add(new AbstractTab(new ResourceModel("securityQuestions")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new SecurityQuestionsPanel(panelId, getPageReference());
+            }
+        });
+
+        return tabs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
deleted file mode 100644
index dd34c1b..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/SecurityQuestions.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.pages;
-
-import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
-import org.apache.syncope.client.console.panels.SecurityQuestionsPanel;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-public class SecurityQuestions extends BasePage {
-
-    private static final long serialVersionUID = 931085006718655535L;
-
-    public SecurityQuestions(final PageParameters parameters) {
-        super(parameters);
-
-        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
-
-        WebMarkupContainer content = new WebMarkupContainer("content");
-        content.setOutputMarkupId(true);
-        body.add(content);
-
-        SecurityQuestionsPanel securityQuestionsPanel =
-                new SecurityQuestionsPanel("securityQuestionPanel", getPageReference());
-        securityQuestionsPanel.setOutputMarkupId(true);
-
-        content.add(securityQuestionsPanel);
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
new file mode 100644
index 0000000..ba9e033
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.java
@@ -0,0 +1,266 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.ApplicationDirectoryPanel.ApplicationDataProvider;
+import org.apache.syncope.client.console.rest.ApplicationRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.console.wizards.WizardMgtPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.ApplicationTO;
+import org.apache.syncope.common.lib.to.EntityTO;
+import org.apache.syncope.common.lib.to.PrivilegeTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.StringResourceModel;
+
+public class ApplicationDirectoryPanel extends
+        DirectoryPanel<ApplicationTO, ApplicationTO, ApplicationDataProvider, ApplicationRestClient> {
+
+    private static final long serialVersionUID = -5491515010207202168L;
+
+    protected final BaseModal<PrivilegeTO> privilegeModal = new BaseModal<PrivilegeTO>("outer") {
+
+        private static final long serialVersionUID = 389935548143327858L;
+
+        @Override
+        protected void onConfigure() {
+            super.onConfigure();
+            setFooterVisible(false);
+        }
+
+    };
+
+    protected ApplicationDirectoryPanel(final String id, final Builder builder) {
+        super(id, builder);
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, StandardEntitlement.APPLICATION_CREATE);
+        setReadOnly(!SyncopeConsoleSession.get().owns(StandardEntitlement.APPLICATION_UPDATE));
+
+        disableCheckBoxes();
+        setShowResultPage(true);
+
+        modal.size(Modal.Size.Medium);
+        modal.addSubmitButton();
+        setFooterVisibility(true);
+        modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
+
+            private static final long serialVersionUID = 8804221891699487139L;
+
+            @Override
+            public void onClose(final AjaxRequestTarget target) {
+                updateResultTable(target);
+                modal.show(false);
+            }
+        });
+
+        privilegeModal.size(Modal.Size.Large);
+        setWindowClosedReloadCallback(privilegeModal);
+        addOuterObject(privilegeModal);
+
+        AjaxLink<Void> newApplLink = new AjaxLink<Void>("add") {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                modal.header(new StringResourceModel("any.new"));
+                modal.setContent(new ApplicationModalPanel(new ApplicationTO(), true, modal, pageRef));
+                modal.show(true);
+                target.add(modal);
+            }
+        };
+        ((WebMarkupContainer) get("container:content")).addOrReplace(newApplLink);
+        MetaDataRoleAuthorizationStrategy.authorize(newApplLink, RENDER, StandardEntitlement.APPLICATION_CREATE);
+
+        initResultTable();
+    }
+
+    @Override
+    protected ApplicationDataProvider dataProvider() {
+        return new ApplicationDataProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_APPLICATION_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected List<IColumn<ApplicationTO, String>> getColumns() {
+        final List<IColumn<ApplicationTO, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(new ResourceModel("key"), "key", "key"));
+        columns.add(new PropertyColumn<>(new ResourceModel("description"), "description", "description"));
+        columns.add(new AbstractColumn<ApplicationTO, String>(new ResourceModel("privileges")) {
+
+            private static final long serialVersionUID = 2054811145491901166L;
+
+            @Override
+            public void populateItem(
+                    final Item<ICellPopulator<ApplicationTO>> item,
+                    final String componentId,
+                    final IModel<ApplicationTO> rowModel) {
+
+                item.add(new Label(componentId, "[" + rowModel.getObject().getPrivileges().stream().
+                        map(EntityTO::getKey).collect(Collectors.joining(", ")) + "]"));
+            }
+        });
+
+        return columns;
+    }
+
+    @Override
+    public ActionsPanel<ApplicationTO> getActions(final IModel<ApplicationTO> model) {
+        final ActionsPanel<ApplicationTO> panel = super.getActions(model);
+
+        panel.add(new ActionLink<ApplicationTO>() {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ApplicationTO ignore) {
+                modal.header(new StringResourceModel("any.edit", model));
+                modal.setContent(new ApplicationModalPanel(model.getObject(), false, modal, pageRef));
+                modal.show(true);
+                target.add(modal);
+            }
+        }, ActionLink.ActionType.EDIT, StandardEntitlement.APPLICATION_UPDATE);
+
+        panel.add(new ActionLink<ApplicationTO>() {
+
+            private static final long serialVersionUID = -7978723352517770644L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ApplicationTO ignore) {
+                target.add(privilegeModal.setContent(new PrivilegeDirectoryPanel(
+                        privilegeModal, model.getObject(), pageRef)));
+
+                privilegeModal.header(new StringResourceModel(
+                        "application.privileges", ApplicationDirectoryPanel.this, Model.of(model.getObject())));
+
+                MetaDataRoleAuthorizationStrategy.authorize(
+                        privilegeModal.getForm(), ENABLE, StandardEntitlement.APPLICATION_UPDATE);
+
+                privilegeModal.show(true);
+            }
+        }, ActionLink.ActionType.COMPOSE, StandardEntitlement.APPLICATION_UPDATE);
+
+        panel.add(new ActionLink<ApplicationTO>() {
+
+            private static final long serialVersionUID = 3766262567901552032L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final ApplicationTO ignore) {
+                try {
+                    restClient.delete(model.getObject().getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting application {}", model.getObject().getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.APPLICATION_DELETE, true);
+
+        return panel;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBulkActions() {
+        return Collections.<ActionLink.ActionType>emptyList();
+    }
+
+    public abstract static class Builder
+            extends DirectoryPanel.Builder<ApplicationTO, ApplicationTO, ApplicationRestClient> {
+
+        private static final long serialVersionUID = 5530948153889495221L;
+
+        public Builder(final PageReference pageRef) {
+            super(new ApplicationRestClient(), pageRef);
+        }
+
+        @Override
+        protected WizardMgtPanel<ApplicationTO> newInstance(final String id, final boolean wizardInModal) {
+            return new ApplicationDirectoryPanel(id, this);
+        }
+    }
+
+    protected class ApplicationDataProvider extends DirectoryDataProvider<ApplicationTO> {
+
+        private static final long serialVersionUID = 3124431855954382273L;
+
+        private final SortableDataProviderComparator<ApplicationTO> comparator;
+
+        private final ApplicationRestClient restClient = new ApplicationRestClient();
+
+        public ApplicationDataProvider(final int paginatorRows) {
+            super(paginatorRows);
+            this.comparator = new SortableDataProviderComparator<>(this);
+        }
+
+        @Override
+        public Iterator<ApplicationTO> iterator(final long first, final long count) {
+            List<ApplicationTO> result = restClient.list();
+            Collections.sort(result, comparator);
+            return result.subList((int) first, (int) first + (int) count).iterator();
+        }
+
+        @Override
+        public long size() {
+            return restClient.list().size();
+        }
+
+        @Override
+        public IModel<ApplicationTO> model(final ApplicationTO object) {
+            return new CompoundPropertyModel<>(object);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java
new file mode 100644
index 0000000..6f9c1f2
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ApplicationModalPanel.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.ApplicationRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.lib.to.ApplicationTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.PropertyModel;
+
+public class ApplicationModalPanel extends AbstractModalPanel<ApplicationTO> {
+
+    private static final long serialVersionUID = 4575264480736377795L;
+
+    private final ApplicationRestClient restClient = new ApplicationRestClient();
+
+    private final ApplicationTO application;
+
+    private final boolean create;
+
+    public ApplicationModalPanel(
+            final ApplicationTO application,
+            final boolean create,
+            final BaseModal<ApplicationTO> modal,
+            final PageReference pageRef) {
+
+        super(modal, pageRef);
+        this.application = application;
+        this.create = create;
+
+        modal.setFormModel(application);
+
+        AjaxTextFieldPanel key = new AjaxTextFieldPanel(
+                "key", "key", new PropertyModel<>(application, "key"), false);
+        key.setReadOnly(!create);
+        key.setRequired(true);
+        add(key);
+
+        AjaxTextFieldPanel description = new AjaxTextFieldPanel(
+                "description", "description", new PropertyModel<>(application, "description"), false);
+        description.setRequired(false);
+        add(description);
+    }
+
+    @Override
+    public ApplicationTO getItem() {
+        return application;
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        try {
+            if (create) {
+                restClient.create(application);
+            } else {
+                restClient.update(application);
+            }
+            SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+            this.modal.close(target);
+        } catch (Exception e) {
+            LOG.error("While creating/updating application", e);
+            SyncopeConsoleSession.get().error(
+                    StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
+        }
+        ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
index d1c15e6..ebbacd4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmDirectoryPanel.java
@@ -24,16 +24,19 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.DirectoryDataProvider;
 import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.DynRealmDirectoryPanel.DynRealmDataProvider;
 import org.apache.syncope.client.console.rest.DynRealmRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
 import org.apache.syncope.client.console.wizards.DynRealmWrapper;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
+import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.DynRealmTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.PageReference;
@@ -76,7 +79,7 @@ public class DynRealmDirectoryPanel extends
             }
         });
 
-        AjaxLink<Void> newDynReamlLink = new AjaxLink<Void>("add") {
+        AjaxLink<Void> newDynRealmlLink = new AjaxLink<Void>("add") {
 
             private static final long serialVersionUID = -7978723352517770644L;
 
@@ -88,8 +91,8 @@ public class DynRealmDirectoryPanel extends
                 target.add(modal);
             }
         };
-        ((WebMarkupContainer) get("container:content")).addOrReplace(newDynReamlLink);
-        MetaDataRoleAuthorizationStrategy.authorize(newDynReamlLink, RENDER, StandardEntitlement.DYNREALM_CREATE);
+        ((WebMarkupContainer) get("container:content")).addOrReplace(newDynRealmlLink);
+        MetaDataRoleAuthorizationStrategy.authorize(newDynRealmlLink, RENDER, StandardEntitlement.DYNREALM_CREATE);
 
         initResultTable();
     }
@@ -130,6 +133,25 @@ public class DynRealmDirectoryPanel extends
             }
         }, ActionLink.ActionType.EDIT, StandardEntitlement.DYNREALM_UPDATE);
 
+        panel.add(new ActionLink<DynRealmTO>() {
+
+            private static final long serialVersionUID = 3766262567901552032L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final DynRealmTO ignore) {
+                try {
+                    restClient.delete(model.getObject().getKey());
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting dynamic realm {}", model.getObject().getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.DYNREALM_DELETE, true);
+
         return panel;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
index f1a0b69..b373274 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DynRealmModalPanel.java
@@ -147,7 +147,6 @@ public class DynRealmModalPanel extends AbstractModalPanel<DynRealmWrapper> {
                     StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage());
         }
         ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
new file mode 100644
index 0000000..2444812
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.ApplicationRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.console.wizards.AjaxWizard;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.ApplicationTO;
+import org.apache.syncope.common.lib.to.PrivilegeTO;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public class PrivilegeDirectoryPanel extends DirectoryPanel<
+        PrivilegeTO, PrivilegeTO, DirectoryDataProvider<PrivilegeTO>, ApplicationRestClient>
+        implements ModalPanel {
+
+    private static final long serialVersionUID = 6524374026036584897L;
+
+    private final ApplicationTO application;
+
+    private final BaseModal<PrivilegeTO> baseModal;
+
+    protected PrivilegeDirectoryPanel(
+            final BaseModal<PrivilegeTO> baseModal, final ApplicationTO application, final PageReference pageRef) {
+
+        super(BaseModal.CONTENT_ID, pageRef, false);
+        this.baseModal = baseModal;
+        this.application = application;
+
+        disableCheckBoxes();
+        enableExitButton();
+
+        this.addNewItemPanelBuilder(new PrivilegeWizardBuilder(application, new PrivilegeTO(), pageRef), true);
+
+        MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, StandardEntitlement.APPLICATION_UPDATE);
+        initResultTable();
+    }
+
+    @Override
+    protected List<IColumn<PrivilegeTO, String>> getColumns() {
+        final List<IColumn<PrivilegeTO, String>> columns = new ArrayList<>();
+
+        columns.add(new PropertyColumn<>(new ResourceModel("key"), "key", "key"));
+        columns.add(new PropertyColumn<>(new ResourceModel("description"), "description", "description"));
+
+        return columns;
+    }
+
+    @Override
+    protected ActionsPanel<PrivilegeTO> getActions(final IModel<PrivilegeTO> model) {
+        ActionsPanel<PrivilegeTO> panel = super.getActions(model);
+
+        panel.add(new ActionLink<PrivilegeTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final PrivilegeTO ignore) {
+                PrivilegeDirectoryPanel.this.getTogglePanel().close(target);
+                send(PrivilegeDirectoryPanel.this, Broadcast.EXACT,
+                        new AjaxWizard.EditItemActionEvent<>(model.getObject(), target));
+            }
+        }, ActionLink.ActionType.EDIT, StandardEntitlement.APPLICATION_UPDATE);
+
+        panel.add(new ActionLink<PrivilegeTO>() {
+
+            private static final long serialVersionUID = -3722207913631435501L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target, final PrivilegeTO ignore) {
+                try {
+                    application.getPrivileges().remove(model.getObject());
+                    restClient.update(application);
+                    SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+                    customActionOnFinishCallback(target);
+                } catch (SyncopeClientException e) {
+                    LOG.error("While deleting {}", model.getObject().getKey(), e);
+                    SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage())
+                            ? e.getClass().getName() : e.getMessage());
+                }
+                ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+            }
+        }, ActionLink.ActionType.DELETE, StandardEntitlement.APPLICATION_UPDATE, true);
+
+        return panel;
+    }
+
+    @Override
+    protected Collection<ActionType> getBulkActions() {
+        return Collections.<ActionType>emptyList();
+    }
+
+    @Override
+    protected PrivilegeDataProvider dataProvider() {
+        return new PrivilegeDataProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_PRIVILEGE_PAGINATOR_ROWS;
+    }
+
+    protected class PrivilegeDataProvider extends DirectoryDataProvider<PrivilegeTO> {
+
+        private static final long serialVersionUID = 4725679400450513556L;
+
+        private final SortableDataProviderComparator<PrivilegeTO> comparator;
+
+        public PrivilegeDataProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("description", SortOrder.ASCENDING);
+            comparator = new SortableDataProviderComparator<>(this);
+        }
+
+        @Override
+        public Iterator<PrivilegeTO> iterator(final long first, final long count) {
+            List<PrivilegeTO> list = application.getPrivileges();
+            Collections.sort(list, comparator);
+            return list.subList((int) first, (int) first + (int) count).iterator();
+        }
+
+        @Override
+        public long size() {
+            return application.getPrivileges().size();
+        }
+
+        @Override
+        public IModel<PrivilegeTO> model(final PrivilegeTO object) {
+            return new CompoundPropertyModel<>(object);
+        }
+    }
+
+    @Override
+    public void onEvent(final IEvent<?> event) {
+        super.onEvent(event);
+        if (event.getPayload() instanceof ExitEvent && modal != null) {
+            final AjaxRequestTarget target = ExitEvent.class.cast(event.getPayload()).getTarget();
+            baseModal.show(false);
+            baseModal.close(target);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java
new file mode 100644
index 0000000..e1c4f5d
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.io.Serializable;
+import org.apache.syncope.client.console.rest.ApplicationRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.JsonEditorPanel;
+import org.apache.syncope.client.console.wizards.AjaxWizardBuilder;
+import org.apache.syncope.common.lib.to.ApplicationTO;
+import org.apache.syncope.common.lib.to.PrivilegeTO;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.extensions.wizard.WizardModel;
+import org.apache.wicket.extensions.wizard.WizardStep;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.StringResourceModel;
+
+public class PrivilegeWizardBuilder extends AjaxWizardBuilder<PrivilegeTO> {
+
+    private static final long serialVersionUID = -1817419622749405208L;
+
+    private final ApplicationRestClient restClient = new ApplicationRestClient();
+
+    private final ApplicationTO application;
+
+    public PrivilegeWizardBuilder(
+            final ApplicationTO application, final PrivilegeTO privilege, final PageReference pageRef) {
+
+        super(privilege, pageRef);
+        this.application = application;
+    }
+
+    @Override
+    protected WizardModel buildModelSteps(final PrivilegeTO modelObject, final WizardModel wizardModel) {
+        wizardModel.add(new Profile(modelObject));
+        wizardModel.add(new Spec(modelObject));
+        return wizardModel;
+    }
+
+    @Override
+    protected Serializable onApplyInternal(final PrivilegeTO modelObject) {
+        application.getPrivileges().removeIf(privilege -> privilege.getKey().equals(modelObject.getKey()));
+        application.getPrivileges().add(modelObject);
+
+        restClient.update(application);
+
+        return modelObject;
+    }
+
+    public class Profile extends WizardStep {
+
+        private static final long serialVersionUID = 11881843064077955L;
+
+        public Profile(final PrivilegeTO privilege) {
+            setTitleModel(privilege.getKey() == null
+                    ? new StringResourceModel("privilege.new")
+                    : new StringResourceModel("privilege.edit", Model.of(privilege)));
+
+            AjaxTextFieldPanel key = new AjaxTextFieldPanel(
+                    "key", "key", new PropertyModel<>(privilege, "key"), false);
+            key.setReadOnly(privilege.getKey() != null);
+            key.setRequired(true);
+            add(key);
+
+            AjaxTextFieldPanel description = new AjaxTextFieldPanel(
+                    "description", "description", new PropertyModel<>(privilege, "description"), false);
+            description.setRequired(false);
+            add(description);
+        }
+    }
+
+    public class Spec extends WizardStep {
+
+        private static final long serialVersionUID = -3237113253888332643L;
+
+        public Spec(final PrivilegeTO privilege) {
+            setTitleModel(privilege.getKey() == null
+                    ? new StringResourceModel("privilege.new")
+                    : new StringResourceModel("privilege.edit", Model.of(privilege)));
+
+            add(new JsonEditorPanel(new PropertyModel<>(privilege, "spec")));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
index 4768d16..a410833 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
@@ -117,6 +117,8 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, Role
                 new ResourceModel("realms"), null, "realms"));
         columns.add(new PropertyColumn<>(
                 new ResourceModel("dynRealms"), null, "dynRealms"));
+        columns.add(new PropertyColumn<>(
+                new ResourceModel("privileges"), null, "privileges"));
 
         return columns;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
index 3a12a82..7660153 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.java
@@ -105,6 +105,7 @@ public class SecurityQuestionsPanel extends DirectoryPanel<
             final Builder<SecurityQuestionTO, SecurityQuestionTO, SecurityQuestionRestClient> builder) {
 
         super(id, builder);
+        setOutputMarkupId(true);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
index 7cdda85..3d44dec 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
@@ -19,9 +19,9 @@
 package org.apache.syncope.client.console.panels.search;
 
 import java.io.Serializable;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
@@ -68,6 +68,8 @@ public abstract class AbstractSearchPanel extends Panel {
 
     protected IModel<List<String>> roleNames;
 
+    protected IModel<List<String>> privilegeNames;
+
     protected IModel<List<SearchClause>> model;
 
     protected WebMarkupContainer searchFormContainer;
@@ -147,7 +149,7 @@ public abstract class AbstractSearchPanel extends Panel {
         final SearchClausePanel searchClausePanel = new SearchClausePanel("panel", "panel",
                 Model.of(new SearchClause()),
                 required,
-                types, anames, dnames, groupInfo, roleNames, resourceNames);
+                types, anames, dnames, groupInfo, roleNames, privilegeNames, resourceNames);
 
         if (enableSearch) {
             searchClausePanel.enableSearch(builder.resultContainer);
@@ -186,11 +188,7 @@ public abstract class AbstractSearchPanel extends Panel {
                 final List<PlainSchemaTO> schemas = schemaRestClient.<PlainSchemaTO>getSchemas(
                         SchemaType.PLAIN, null, anyTypeRestClient.read(type).getClasses().toArray(new String[] {}));
 
-                final Map<String, PlainSchemaTO> res = new HashMap<>();
-                for (PlainSchemaTO schema : schemas) {
-                    res.put(schema.getKey(), schema);
-                }
-                return res;
+                return schemas.stream().collect(Collectors.toMap(schema -> schema.getKey(), Function.identity()));
             }
         };
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClause.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClause.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClause.java
index 415abba..8d20abc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClause.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClause.java
@@ -41,6 +41,7 @@ public final class SearchClause implements Serializable {
         GROUP_MEMBERSHIP,
         GROUP_MEMBER,
         ROLE_MEMBERSHIP,
+        PRIVILEGE,
         RESOURCE,
         RELATIONSHIP;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index 745688e..0dc3196 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -86,6 +86,8 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
     private final IModel<List<String>> roleNames;
 
+    private final IModel<List<String>> privilegeNames;
+
     private final IModel<List<String>> resourceNames;
 
     private IModel<SearchClause> clause;
@@ -114,6 +116,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
             final IModel<List<String>> dnames,
             final Pair<IModel<Map<String, String>>, Integer> groupInfo,
             final IModel<List<String>> roleNames,
+            final IModel<List<String>> privilegeNames,
             final IModel<List<String>> resourceNames) {
 
         super(id, name, clause);
@@ -126,6 +129,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
         this.dnames = dnames;
         this.groupInfo = groupInfo;
         this.roleNames = roleNames;
+        this.privilegeNames = privilegeNames;
         this.resourceNames = resourceNames;
 
         searchButton = new AjaxSubmitLink("search") {
@@ -170,6 +174,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                         return Arrays.asList(SearchClause.Comparator.values());
 
                     case ROLE_MEMBERSHIP:
+                    case PRIVILEGE:
                     case GROUP_MEMBERSHIP:
                     case GROUP_MEMBER:
                     case RESOURCE:
@@ -219,6 +224,11 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                         Collections.sort(roles);
                         return roles;
 
+                    case PRIVILEGE:
+                        final List<String> privileges = new ArrayList<>(privilegeNames.getObject());
+                        Collections.sort(privileges);
+                        return privileges;
+
                     case RESOURCE:
                         final List<String> resources = new ArrayList<>(resourceNames.getObject());
                         Collections.sort(resources);
@@ -596,6 +606,15 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                     property.setChoices(properties.getObject());
                     break;
 
+                case PRIVILEGE:
+                    value.setEnabled(false);
+                    value.setModelObject(StringUtils.EMPTY);
+
+                    // reload properties list
+                    properties.detach();
+                    property.setChoices(properties.getObject());
+                    break;
+                    
                 case GROUP_MEMBERSHIP:
                     value.setEnabled(false);
                     value.setModelObject(StringUtils.EMPTY);
@@ -718,6 +737,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                         }
                         break;
                     case ROLE_MEMBERSHIP:
+                    case PRIVILEGE:
                     case RESOURCE:
                         switch (object) {
                             case EQUALS:
@@ -824,7 +844,8 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
     @Override
     public FieldPanel<SearchClause> clone() {
         final SearchClausePanel panel = new SearchClausePanel(
-                getId(), name, null, required, types, anames, dnames, groupInfo, roleNames, resourceNames);
+                getId(), name, null, required, types, anames, dnames, groupInfo,
+                roleNames, privilegeNames, resourceNames);
         panel.setReadOnly(this.isReadOnly());
         panel.setRequired(this.isRequired());
         if (searchButton.isEnabled()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
index eaecc2f..9bef61c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
@@ -123,6 +123,9 @@ public final class SearchUtils implements Serializable {
         if (SpecialAttr.ROLES.toString().equals(property)) {
             clause.setType(SearchClause.Type.ROLE_MEMBERSHIP);
             clause.setProperty(value);
+        } else if (SpecialAttr.PRIVILEGES.toString().equals(property)) {
+            clause.setType(SearchClause.Type.PRIVILEGE);
+            clause.setProperty(value);
         } else if (SpecialAttr.RELATIONSHIPS.toString().equals(property)) {
             clause.setType(SearchClause.Type.RELATIONSHIP);
             clause.setProperty(value);
@@ -345,6 +348,23 @@ public final class SearchUtils implements Serializable {
                         }
                         break;
 
+                    case PRIVILEGE:
+                        if (StringUtils.isNotBlank(clause.getProperty())) {
+                            switch (clause.getComparator()) {
+                                case EQUALS:
+                                    condition = ((UserFiqlSearchConditionBuilder) builder).
+                                            withPrivileges(clause.getProperty());
+                                    break;
+                                case NOT_EQUALS:
+                                    condition = ((UserFiqlSearchConditionBuilder) builder).
+                                            withoutPrivileges(clause.getProperty());
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                        break;
+
                     case RELATIONSHIP:
                         if (StringUtils.isNotBlank(clause.getProperty())) {
                             if (builder instanceof UserFiqlSearchConditionBuilder) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
index efc9de8..7dd81b3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/UserSearchPanel.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.panels.search;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
+import org.apache.syncope.client.console.rest.ApplicationRestClient;
 import org.apache.syncope.client.console.rest.RoleRestClient;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -33,6 +34,8 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
 
     private final RoleRestClient roleRestClient = new RoleRestClient();
 
+    private final ApplicationRestClient applicationRestClient = new ApplicationRestClient();
+
     public static class Builder extends AnyObjectSearchPanel.Builder {
 
         private static final long serialVersionUID = 6308997285778809578L;
@@ -64,6 +67,18 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
                 return roleRestClient.list().stream().map(EntityTO::getKey).collect(Collectors.toList());
             }
         };
+
+        this.privilegeNames = new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                return applicationRestClient.list().stream().
+                        flatMap(application -> application.getPrivileges().stream()).
+                        map(EntityTO::getKey).collect(Collectors.toList());
+            }
+        };
     }
 
     @Override
@@ -71,6 +86,7 @@ public final class UserSearchPanel extends AnyObjectSearchPanel {
         List<SearchClause.Type> result = new ArrayList<>();
         result.add(SearchClause.Type.ATTRIBUTE);
         result.add(SearchClause.Type.ROLE_MEMBERSHIP);
+        result.add(SearchClause.Type.PRIVILEGE);
         result.add(SearchClause.Type.GROUP_MEMBERSHIP);
         result.add(SearchClause.Type.RESOURCE);
         result.add(SearchClause.Type.RELATIONSHIP);

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
index 600ebd8..2b89ee4 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/policies/PolicyRuleDirectoryPanel.java
@@ -200,7 +200,7 @@ public class PolicyRuleDirectoryPanel<T extends PolicyTO> extends DirectoryPanel
                     customActionOnFinishCallback(target);
                 }
             }
-        }, ActionLink.ActionType.RELOAD, StandardEntitlement.TASK_LIST).hideLabel();
+        }, ActionLink.ActionType.RELOAD, StandardEntitlement.POLICY_LIST).hideLabel();
         return panel;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java
new file mode 100644
index 0000000..0c765f8
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ApplicationRestClient.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.rest;
+
+import java.util.List;
+import org.apache.syncope.common.lib.to.ApplicationTO;
+import org.apache.syncope.common.rest.api.service.ApplicationService;
+
+public class ApplicationRestClient extends BaseRestClient {
+
+    private static final long serialVersionUID = -381814125643246243L;
+
+    public void delete(final String key) {
+        getService(ApplicationService.class).delete(key);
+    }
+
+    public ApplicationTO read(final String key) {
+        return getService(ApplicationService.class).read(key);
+    }
+
+    public void update(final ApplicationTO applicationTO) {
+        getService(ApplicationService.class).update(applicationTO);
+    }
+
+    public void create(final ApplicationTO applicationTO) {
+        getService(ApplicationService.class).create(applicationTO);
+    }
+
+    public List<ApplicationTO> list() {
+        return getService(ApplicationService.class).list();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
index d45e34f..aee979f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
@@ -26,8 +26,7 @@ import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
 import org.apache.syncope.client.console.pages.Notifications;
 import org.apache.syncope.client.console.pages.Policies;
-import org.apache.syncope.client.console.pages.Administration;
-import org.apache.syncope.client.console.pages.SecurityQuestions;
+import org.apache.syncope.client.console.pages.Security;
 import org.apache.syncope.client.console.pages.Types;
 import org.apache.syncope.client.console.topology.Topology;
 import org.apache.syncope.common.lib.info.NumbersInfo;
@@ -56,9 +55,9 @@ public class CompletenessWidget extends BaseWidget {
 
     private final BookmarkablePageLink<Types> types;
 
-    private final BookmarkablePageLink<SecurityQuestions> securityquestions;
+    private final BookmarkablePageLink<Security> securityquestions;
 
-    private final BookmarkablePageLink<Administration> roles;
+    private final BookmarkablePageLink<Security> roles;
 
     public CompletenessWidget(final String id, final Map<String, Boolean> confCompleteness) {
         super(id);
@@ -108,12 +107,12 @@ public class CompletenessWidget extends BaseWidget {
                 !confCompleteness.get(NumbersInfo.ConfItem.VIR_SCHEMA.name())
                 || !confCompleteness.get(NumbersInfo.ConfItem.ANY_TYPE.name()));
 
-        securityquestions = BookmarkablePageLinkBuilder.build("securityquestions", SecurityQuestions.class);
+        securityquestions = BookmarkablePageLinkBuilder.build("securityquestions", Security.class);
         securityquestions.setOutputMarkupPlaceholderTag(true);
         actions.add(securityquestions);
         securityquestions.setVisible(!confCompleteness.get(NumbersInfo.ConfItem.SECURITY_QUESTION.name()));
 
-        roles = BookmarkablePageLinkBuilder.build("roles", Administration.class);
+        roles = BookmarkablePageLinkBuilder.build("roles", Security.class);
         roles.setOutputMarkupPlaceholderTag(true);
         MetaDataRoleAuthorizationStrategy.authorize(roles, WebPage.ENABLE, StandardEntitlement.ROLE_LIST);
         actions.add(roles);

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
index c7e71a7..36cf21b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/NumberWidget.java
@@ -27,7 +27,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.syncope.client.console.pages.Realms;
-import org.apache.syncope.client.console.pages.Administration;
+import org.apache.syncope.client.console.pages.Security;
 import org.apache.syncope.client.console.topology.Topology;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.wicket.request.component.IRequestablePage;
@@ -78,7 +78,7 @@ public class NumberWidget extends BaseWidget {
                     responsePage = Realms.class;
                     isAuthorized = SyncopeConsoleSession.get().owns(label + "_SEARCH");
                 } else {
-                    responsePage = Administration.class;
+                    responsePage = Security.class;
                     isAuthorized = SyncopeConsoleSession.get().owns(StandardEntitlement.ROLE_LIST);
                 }
                 break;

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
index 8ea6aa2..1f3ecd3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.panels.search.UserSearchPanel;
+import org.apache.syncope.client.console.rest.ApplicationRestClient;
 import org.apache.syncope.client.console.rest.DynRealmRestClient;
 import org.apache.syncope.client.console.rest.RealmRestClient;
 import org.apache.syncope.client.console.rest.RoleRestClient;
@@ -94,6 +95,7 @@ public class RoleWizardBuilder extends AjaxWizardBuilder<RoleWrapper> {
         wizardModel.add(new Entitlements(modelObject.getInnerObject()));
         wizardModel.add(new Realms(modelObject.getInnerObject()));
         wizardModel.add(new DynRealms(modelObject.getInnerObject()));
+        wizardModel.add(new Privileges(modelObject.getInnerObject()));
         return wizardModel;
     }
 
@@ -179,4 +181,19 @@ public class RoleWizardBuilder extends AjaxWizardBuilder<RoleWrapper> {
         }
     }
 
+    public static class Privileges extends WizardStep {
+
+        private static final long serialVersionUID = 6896014330702958579L;
+
+        public Privileges(final RoleTO modelObject) {
+            setTitleModel(new ResourceModel("privileges"));
+            add(new AjaxPalettePanel.Builder<>().build("privileges",
+                    new PropertyModel<>(modelObject, "privileges"),
+                    new ListModel<>(new ApplicationRestClient().list().stream().
+                            flatMap(application -> application.getPrivileges().stream()).
+                            map(EntityTO::getKey).collect(Collectors.toList()))).
+                    hideLabel().setOutputMarkupId(true));
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/console.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/console.properties b/client/console/src/main/resources/console.properties
index 9c46f7a..3139c1c 100644
--- a/client/console/src/main/resources/console.properties
+++ b/client/console/src/main/resources/console.properties
@@ -37,7 +37,6 @@ flowableModelerDirectory=${flowable-modeler.directory}
 
 reconciliationReportKey=c3520ad9-179f-49e7-b315-d684d216dd97
 
-page.administration=org.apache.syncope.client.console.pages.Administration
 page.dashboard=org.apache.syncope.client.console.pages.Dashboard
 page.realms=org.apache.syncope.client.console.pages.Realms
 page.topology=org.apache.syncope.client.console.topology.Topology
@@ -46,7 +45,7 @@ page.workflow=org.apache.syncope.client.console.pages.Workflow
 page.audit=org.apache.syncope.client.console.pages.Audit
 page.implementations=org.apache.syncope.client.console.pages.Implementations
 page.logs=org.apache.syncope.client.console.pages.Logs
-page.securityquestions=org.apache.syncope.client.console.pages.SecurityQuestions
+page.security=org.apache.syncope.client.console.pages.Security
 page.types=org.apache.syncope.client.console.pages.Types
 page.policies=org.apache.syncope.client.console.pages.Policies
 page.notifications=org.apache.syncope.client.console.pages.Notifications

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
index f668185..2a36516 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
@@ -53,7 +53,6 @@ realms=Realms
 topology=Topology
 roles=Roles
 policies=Policies
-securityQuestions=Security Questions
 workflow=Workflow
 logs=Logs
 layouts=Layouts
@@ -70,7 +69,7 @@ audit=Audit
 connectors.confirm.reload=This request is potentially dangerous for running operations, continue?
 intAttrNameInfo.help=Besides auto-completed attributes, you can also refer to groups, any objects or memberships  (if applicable); for example:
 confirmGlobalLogout=Do you really want to perform global logout?
-administration=Administration
 implementations=Implementations
 
 timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
+security=Security

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
index fa983f7..f1b3985 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
@@ -53,7 +53,6 @@ realms=Realm
 topology=Topologia
 roles=Ruoli
 policies=Politiche
-securityQuestions=Domande di sicurezza
 workflow=Workflow
 logs=Log
 layouts=Layout
@@ -70,7 +69,7 @@ audit=Audit
 connectors.confirm.reload=Questa richiesta \u00e8 potenzialmente dannosa per le operazioni in corso, proseguire?
 intAttrNameInfo.help=Oltre agli attributi auto-completati, \u00e8 possibile fare riferimento anche a gruppi, any object e membership (se applicabile); ad esempio:
 confirmGlobalLogout=Vuoi davvero procedere al logout globale?
-administration=Amministrazione
 implementations=Implementazioni
 
 timeout=L'operazione sta durando troppo: sar\u00e0 eseguita in background. Verifica il risultato pi\u00f9 tardi (gli errori non saranno notificati).
+security=Sicurezza

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
index 9c66b44..c512754 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
@@ -52,7 +52,6 @@ realms=\u30ec\u30eb\u30e0
 topology=\u30c8\u30dd\u30ed\u30b8\u30fc
 roles=\u30ed\u30fc\u30eb
 policies=\u30dd\u30ea\u30b7\u30fc
-securityQuestions=\u79d8\u5bc6\u306e\u8cea\u554f
 workflow=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc
 logs=\u30ed\u30b0
 layouts=\u30ec\u30a4\u30a2\u30a6\u30c8
@@ -69,6 +68,6 @@ audit=\u76e3\u67fb
 connectors.confirm.reload=\u3053\u306e\u8981\u6c42\u306f\u3001\u5b9f\u884c\u4e2d\u306e\u64cd\u4f5c\u306b\u5bfe\u3057\u3066\u5371\u967a\u306a\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b?
 intAttrNameInfo.help=\u30aa\u30fc\u30c8\u30b3\u30f3\u30d7\u30ea\u30fc\u30c8\u306e\u5c5e\u6027\u4ee5\u5916\u306b\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3001\u30e1\u30f3\u30d0\u30fc\u30b7\u30c3\u30d7\u3082\u53c2\u7167\u53ef\u80fd\u3067\u3059 (\u8a72\u5f53\u3059\u308b\u5834\u5408)\u3002\u4f8b\:
 confirmGlobalLogout=\u30b0\u30ed\u30fc\u30d0\u30eb\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
-administration=\u7ba1\u7406
 implementations=\u5c0e\u5165
 timeout=\u64cd\u4f5c\u306b\u9577\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u307e\u3059\: \u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002 \u7d50\u679c\u3092\u5f8c\u3067\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 (\u30a8\u30e9\u30fc\u306f\u5f15\u304d\u8d77\u3053\u3057\u307e\u305b\u3093)\u3002
+security=Security

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
index 8676cdb..9516f2b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
@@ -53,7 +53,6 @@ realms=Realm
 topology=Topologia
 roles=\t\nFun\u00e7\u00e3o\n\t
 policies=Pol\u00edticas
-securityQuestions=Perguntas de seguran\u00e7a
 workflow=Fluxo de trabalho
 logs=Log
 layouts=Layout
@@ -70,7 +69,7 @@ audit=Audit
 connectors.confirm.reload=Esta requis\u00e7\u00e3o \u00e9 potencialmente perigosa para opera\u00e7\u00f5es em execu\u00e7\u00e3o, prosseguir?
 intAttrNameInfo.help=Besides auto-completed attributes, you can also refer to groups, any objects or memberships  (if applicable); for example:
 confirmGlobalLogout=Do you really want to perform global logout?
-administration=Administra\u00e7\u00e3o
 implementations=Implementa\u00e7\u00f5es
 
 timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
+security=Security


[4/4] syncope git commit: [SYNCOPE-1281] Doc added

Posted by il...@apache.org.
[SYNCOPE-1281] Doc added


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/73f7e0f2
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/73f7e0f2
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/73f7e0f2

Branch: refs/heads/master
Commit: 73f7e0f24a045b8024d6c3ea3e16eed8bde24610
Parents: 72c5885
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Mar 16 17:42:33 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Mar 16 17:42:33 2018 +0100

----------------------------------------------------------------------
 src/main/asciidoc/reference-guide/concepts/privileges.adoc | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/73f7e0f2/src/main/asciidoc/reference-guide/concepts/privileges.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/reference-guide/concepts/privileges.adoc b/src/main/asciidoc/reference-guide/concepts/privileges.adoc
index 77fbfa5..f813ca1 100644
--- a/src/main/asciidoc/reference-guide/concepts/privileges.adoc
+++ b/src/main/asciidoc/reference-guide/concepts/privileges.adoc
@@ -19,3 +19,9 @@
 === Privileges
 
 Privileges model the rights that Users own on external applications.
+
+Privileges are granted via <<roles, roles>> to Users.
+
+[TIP]
+The typical use case for privileges is to use Syncope as registry for available applications and privileges
+that users can own on those; once done this, external tools can query Syncope about the privileges owned by given users.


[2/4] syncope git commit: [SYNCOPE-1281] Console support implemented

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
index e77a0d4..0e0ecbf 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
@@ -52,7 +52,6 @@ realms=\u041e\u0431\u043b\u0430\u0441\u0442\u0438
 topology=\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f
 roles=\u0420\u043e\u043b\u0438
 policies=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438
-securityQuestions=\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b
 workflow=\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f
 logs=\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
 layouts=\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430
@@ -69,7 +68,7 @@ audit=\u0410\u0443\u0434\u0438\u0442
 connectors.confirm.reload=\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0430\u0441\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?
 intAttrNameInfo.help=\u041f\u043e\u043c\u0438\u043c\u043e \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0447\u043b\u0435\u043d\u0441\u0442\u0432\u043e (\u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:
 confirmGlobalLogout=Do you really want to perform global logout?
-administration=Administration
 implementations=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438
 
 timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
+security=Security

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.html
deleted file mode 100644
index 0c79945..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <section class="content-header">
-      <h1>&nbsp;</h1>
-      <ol class="breadcrumb">
-        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
-        <li class="active"><wicket:message key="configuration"/></li>
-        <li class="active"><wicket:message key="administration"/></li>
-      </ol>
-    </section>
-
-    <section class="content" wicket:id="content">
-      <div class="box">
-        <div class="box-body" wicket:id="tabbedPanel"/>
-      </div>
-    </section>
-  </wicket:extend>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.properties
deleted file mode 100644
index 8788d48..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-add=Create new Role
-dynRealms=Dynamic Realms

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_it.properties
deleted file mode 100644
index becfb71..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_it.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-add=Crea un nuovo Ruolo
-dynRealms=Realm dinamici

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ja.properties
deleted file mode 100644
index f9ee467..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ja.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-add=\u65b0\u3057\u3044\u30ed\u30fc\u30eb\u3092\u8ffd\u52a0
-dynRealms=\u52d5\u7684\u30ec\u30eb\u30e0

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_pt_BR.properties
deleted file mode 100644
index e6d08f9..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_pt_BR.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-add=Cria um novo fun\u00e7\u00e3o
-dynRealms=Realm din\u00e2micos

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ru.properties
deleted file mode 100644
index e933b31..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Administration_ru.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# add=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d1\u0080\u00d0\u00be\u00d0\u00bb\u00d1\u008c
-add=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u043e\u043b\u044c
-dynRealms=Dynamic Realms

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
index 76e4c43..c23ace8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BasePage.html
@@ -108,14 +108,13 @@ under the License.
             <li wicket:id="configurationLI" class="treeview">
               <a href="#"><i class="fa fa-edit"></i><span><wicket:message key="configuration"/></span> <span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span></a>
               <ul wicket:id="configurationUL" class="treeview-menu">
-                <li wicket:id="administrationLI"><a href="#" wicket:id="administration"><i class="fa fa-lock"></i><wicket:message key="administration"/></a></li>
                 <li wicket:id="auditLI"><a href="#" wicket:id="audit"><i class="fa fa-check-square-o"></i><wicket:message key="audit"/></a></li>
                 <li wicket:id="implementationsLI"><a href="#" wicket:id="implementations"><i class="fa fa-file-code-o"></i><wicket:message key="implementations"/></a></li>
                 <li wicket:id="logsLI"><a href="#" wicket:id="logs"><i class="fa fa-file-text-o"></i><wicket:message key="logs"/></a></li>
                 <li wicket:id="notificationsLI"><a href="#" wicket:id="notifications"><i class="fa fa-envelope-o"></i><wicket:message key="notifications"/></a></li>
                 <li wicket:id="parametersLI"><a href="#" wicket:id="parameters"><i class="fa fa-cog"></i><wicket:message key="parameters"/></a></li>
                 <li wicket:id="policiesLI"><a href="#" wicket:id="policies"><i class="fa fa-list"></i><wicket:message key="policies"/></a></li>
-                <li wicket:id="securityquestionsLI"><a href="#" wicket:id="securityquestions"><i class="fa fa-question"></i><wicket:message key="securityQuestions"/></a></li>
+                <li wicket:id="securityLI"><a href="#" wicket:id="security"><i class="fa fa-lock"></i><wicket:message key="security"/></a></li>
                 <li wicket:id="typesLI"><a href="#" wicket:id="types"><i class="fa fa-wrench"></i><wicket:message key="types"/></a></li>
                 <li wicket:id="workflowLI"><a href="#" wicket:id="workflow"><i class="fa fa-briefcase"></i><wicket:message key="workflow"/></a></li>
               </ul>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.html
new file mode 100644
index 0000000..3ca4002
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.html
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:extend>
+    <section class="content-header">
+      <h1>&nbsp;</h1>
+      <ol class="breadcrumb">
+        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
+        <li class="active"><wicket:message key="configuration"/></li>
+        <li class="active"><wicket:message key="security"/></li>
+      </ol>
+    </section>
+
+    <section class="content" wicket:id="content">
+      <div class="box">
+        <div class="box-body" wicket:id="tabbedPanel"/>
+      </div>
+    </section>
+  </wicket:extend>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.properties
new file mode 100644
index 0000000..3bba56c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+add=Create new Role
+dynRealms=Dynamic Realms
+privileges=Privileges
+applications=Applications
+securityQuestions=Security Questions

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html
deleted file mode 100644
index 14e360d..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <wicket:extend>
-    <section class="content-header">
-      <h1>&nbsp;</h1>
-      <ol class="breadcrumb">
-        <li><a wicket:id="dashboardBr"><i class="fa fa-dashboard"></i> <wicket:message key="dashboard"/></a></li>
-        <li class="active"><wicket:message key="configuration"/></li>
-        <li class="active"><wicket:message key="securityQuestions"/></li>
-      </ol>
-    </section>
-
-    <section class="content" wicket:id="content">
-      <div class="box">
-        <div class="box-body" wicket:id="securityQuestionPanel"/>
-      </div>
-    </section>
-  </wicket:extend>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties
deleted file mode 100644
index 8e55776..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-createSecurityQuestion=Create new Secutiry Questions
-content=Content

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties
deleted file mode 100644
index 57f0f99..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_it.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-createSecurityQuestion=Crea una nuova domanda di sicurezza
-content=Contenuto

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ja.properties
deleted file mode 100644
index fcb0d38..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ja.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-createSecurityQuestion=\u65b0\u3057\u3044\u79d8\u5bc6\u306e\u8cea\u554f\u3092\u4f5c\u6210
-content=\u5185\u5bb9

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties
deleted file mode 100644
index ddf033a..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_pt_BR.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-createSecurityQuestion=Cria um novo Security Question
-content=Conte\u00fado

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ru.properties
deleted file mode 100644
index 2c020fc..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/SecurityQuestions_ru.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# createSecurityQuestion=Создать вопрос
-createSecurityQuestion=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441
-# content=Содержимое
-content=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_it.properties
new file mode 100644
index 0000000..a8e66ca
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_it.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+add=Crea un nuovo Ruolo
+dynRealms=Realm dinamici
+privileges=Privilegi
+applications=Applicazioni
+securityQuestions=Domande di sicurezza

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ja.properties
new file mode 100644
index 0000000..bbf3747
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ja.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+add=\u65b0\u3057\u3044\u30ed\u30fc\u30eb\u3092\u8ffd\u52a0
+dynRealms=\u52d5\u7684\u30ec\u30eb\u30e0
+privileges=Privileges
+applications=Applications
+securityQuestions=\u79d8\u5bc6\u306e\u8cea\u554f

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_pt_BR.properties
new file mode 100644
index 0000000..f6e211a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_pt_BR.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+add=Cria um novo fun\u00e7\u00e3o
+dynRealms=Realm din\u00e2micos
+privileges=Privileges
+applications=Applications
+securityQuestions=Perguntas de seguran\u00e7a

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ru.properties
new file mode 100644
index 0000000..6a5c308
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Security_ru.properties
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+add=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u043e\u043b\u044c
+dynRealms=Dynamic Realms
+privileges=Privileges
+applications=Applications
+securityQuestions=\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.properties
new file mode 100644
index 0000000..5913502
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+any.edit=Edit ${key}
+any.new=New Application
+description=Description
+compose.title=privileges
+application.privileges=Privileges for ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_it.properties
new file mode 100644
index 0000000..e0d1544
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_it.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+any.edit=Modifica ${key}
+any.new=Nuova Applicazione
+description=Descrizione
+compose.title=privilegi
+application.privileges=Privilegi di ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ja.properties
new file mode 100644
index 0000000..5d4a923
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ja.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+any.edit=${key} \u3092\u7de8\u96c6
+any.new=New Application
+description=Description
+compose.title=privileges
+application.privileges=Privileges for ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_pt_BR.properties
new file mode 100644
index 0000000..a4d60d5
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_pt_BR.properties
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+any.edit=Alterar ${key}
+any.new=New Application
+description=Description
+compose.title=privileges
+application.privileges=Privileges for ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ru.properties
new file mode 100644
index 0000000..7417e49
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationDirectoryPanel_ru.properties
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+any.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c ${key}
+any.new=New Application
+description=Description
+compose.title=privileges
+application.privileges=Privileges for ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationModalPanel.html
new file mode 100644
index 0000000..713cb85
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ApplicationModalPanel.html
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:extend>
+    <div class="form-group">
+      <span wicket:id="key"/>
+      <span wicket:id="description"/>
+    </div>
+  </wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.properties
new file mode 100644
index 0000000..6b9e86c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+privilege.new=New Privilege
+privilege.edit=Edit ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_it.properties
new file mode 100644
index 0000000..fbcc06a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_it.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+privilege.new=Nuovo Privilege
+privilege.edit=Modifica ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ja.properties
new file mode 100644
index 0000000..6b9e86c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ja.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+privilege.new=New Privilege
+privilege.edit=Edit ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_pt_BR.properties
new file mode 100644
index 0000000..6b9e86c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+privilege.new=New Privilege
+privilege.edit=Edit ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ru.properties
new file mode 100644
index 0000000..6b9e86c
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeDirectoryPanel_ru.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+privilege.new=New Privilege
+privilege.edit=Edit ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Profile.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Profile.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Profile.html
new file mode 100644
index 0000000..10945cc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Profile.html
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="key"/>
+      <span wicket:id="description"/>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Spec.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Spec.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Spec.html
new file mode 100644
index 0000000..ee1b97d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PrivilegeWizardBuilder$Spec.html
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="content"/>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.properties
index 7323e05..9eba18d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel.properties
@@ -16,3 +16,4 @@
 # under the License.
 any.edit=Edit Security Question ${key}
 any.new=New Security Question
+content=Content

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_it.properties
index 6d55323..0ef0c4d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_it.properties
@@ -16,3 +16,4 @@
 # under the License.
 any.edit=Modifica Domanda Segreta ${key}
 any.new=Nuova Domanda Segreta
+content=Contenuto

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ja.properties
index ad51d3c..d883e06 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ja.properties
@@ -16,3 +16,4 @@
 # under the License.
 any.edit=\u79d8\u5bc6\u306e\u8cea\u554f ${key} \u3092\u7de8\u96c6
 any.new=\u65b0\u3057\u3044\u79d8\u5bc6\u306e\u8cea\u554f
+content=\u5185\u5bb9

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_pt_BR.properties
index 930c3c2..1cb2b42 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_pt_BR.properties
@@ -16,3 +16,4 @@
 # under the License.
 any.edit=Alterar Pergunta de Seguran\u00e7a ${key}
 any.new=Novo Pergunta de Seguran\u00e7a
+content=Conte\u00fado

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ru.properties
index 16793b4..aefb0e0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/SecurityQuestionsPanel_ru.properties
@@ -15,7 +15,6 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-# any.edit=Изменить вопрос ${key}
 any.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 ${key}
-# any.new=Создать вопрос
 any.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441
+content=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
index 80ebc0c..b3ca11a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
@@ -17,13 +17,10 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head><title></title></head>
-  <body>
-    <wicket:panel>
-      <div class="form-group">
-        <span wicket:id="key">[NAME]</span>
-      </div>
-      <div wicket:id="dynMembershipCond" />
-    </wicket:panel>
-  </body>
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="key">[NAME]</span>
+    </div>
+    <div wicket:id="dynMembershipCond"/>
+  </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
index c55493c..d043a5a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
@@ -17,12 +17,9 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head><title></title></head>
-  <body>
-    <wicket:panel>
-      <div class="form-group">
-        <span wicket:id="dynRealms">[DYNAMIC REALMS]</span>
-      </div>
-    </wicket:panel>
-  </body>
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="dynRealms">[DYNAMIC REALMS]</span>
+    </div>
+  </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
index f14d054..ffbd5aa 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
@@ -17,12 +17,9 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head><title></title></head>
-  <body>
-    <wicket:panel>
-      <div class="form-group">
-        <span wicket:id="entitlements">[ENTITLEMENTS]</span>
-      </div>
-    </wicket:panel>
-  </body>
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="entitlements">[ENTITLEMENTS]</span>
+    </div>
+  </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Privileges.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Privileges.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Privileges.html
new file mode 100644
index 0000000..e65e30a
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Privileges.html
@@ -0,0 +1,25 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="privileges">[PRIVILEGES]</span>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
index 7c3d20e..b4031e2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
@@ -17,12 +17,9 @@ specific language governing permissions and limitations
 under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
-  <head><title></title></head>
-  <body>
-    <wicket:panel>
-      <div class="form-group">
-        <span wicket:id="realms">[REALMS]</span>
-      </div>
-    </wicket:panel>
-  </body>
+  <wicket:panel>
+    <div class="form-group">
+      <span wicket:id="realms">[REALMS]</span>
+    </div>
+  </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/common/lib/src/main/java/org/apache/syncope/common/lib/to/PrivilegeTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PrivilegeTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PrivilegeTO.java
index 5c9ed89..47cc07a 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PrivilegeTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PrivilegeTO.java
@@ -34,8 +34,6 @@ public class PrivilegeTO extends AbstractBaseBean implements EntityTO {
 
     private String application;
 
-    private String specMimeType;
-
     private String spec;
 
     @Override
@@ -64,14 +62,6 @@ public class PrivilegeTO extends AbstractBaseBean implements EntityTO {
         this.application = application;
     }
 
-    public String getSpecMimeType() {
-        return specMimeType;
-    }
-
-    public void setSpecMimeType(final String specMimeType) {
-        this.specMimeType = specMimeType;
-    }
-
     public String getSpec() {
         return spec;
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Privilege.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Privilege.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Privilege.java
index 44744e6..4a39252 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Privilege.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Privilege.java
@@ -28,11 +28,7 @@ public interface Privilege extends ProvidedKeyEntity {
 
     void setDescription(String description);
 
-    String getSpecMimeType();
+    String getSpec();
 
-    void setSpecMimeType(String specMimeType);
-
-    byte[] getSpec();
-
-    void setSpec(byte[] spec);
+    void setSpec(String spec);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPrivilege.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPrivilege.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPrivilege.java
index a01bb5f..0e1a3b5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPrivilege.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPrivilege.java
@@ -22,8 +22,6 @@ import javax.persistence.Entity;
 import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
-import javax.validation.constraints.NotNull;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.syncope.core.persistence.api.entity.Application;
 import org.apache.syncope.core.persistence.api.entity.Privilege;
 
@@ -40,11 +38,8 @@ public class JPAPrivilege extends AbstractProvidedKeyEntity implements Privilege
 
     private String description;
 
-    @NotNull
-    private String specMimeType;
-
     @Lob
-    private byte[] spec;
+    private String spec;
 
     @Override
     public Application getApplication() {
@@ -68,23 +63,13 @@ public class JPAPrivilege extends AbstractProvidedKeyEntity implements Privilege
     }
 
     @Override
-    public String getSpecMimeType() {
-        return specMimeType;
-    }
-
-    @Override
-    public void setSpecMimeType(final String specMimeType) {
-        this.specMimeType = specMimeType;
-    }
-
-    @Override
-    public byte[] getSpec() {
+    public String getSpec() {
         return spec;
     }
 
     @Override
-    public void setSpec(final byte[] spec) {
-        this.spec = ArrayUtils.clone(spec);
+    public void setSpec(final String spec) {
+        this.spec = spec;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ApplicationTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ApplicationTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ApplicationTest.java
index ab5da92..057b2e7 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ApplicationTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/ApplicationTest.java
@@ -67,22 +67,19 @@ public class ApplicationTest extends AbstractTest {
         String privilege1Key = UUID.randomUUID().toString();
         Privilege privilege = entityFactory.newEntity(Privilege.class);
         privilege.setKey(privilege1Key);
-        privilege.setSpecMimeType("application/xml");
-        privilege.setSpec("<one/>".getBytes());
+        privilege.setSpec("{ \"one\": true }");
         application.add(privilege);
 
         String privilege2Key = UUID.randomUUID().toString();
         privilege = entityFactory.newEntity(Privilege.class);
         privilege.setKey(privilege2Key);
-        privilege.setSpecMimeType("application/xml");
-        privilege.setSpec("<one><two/></one>".getBytes());
+        privilege.setSpec("{ \"two\": true }");
         application.add(privilege);
 
         String privilege3Key = UUID.randomUUID().toString();
         privilege = entityFactory.newEntity(Privilege.class);
         privilege.setKey(privilege3Key);
-        privilege.setSpecMimeType("application/xml");
-        privilege.setSpec("<one><two><three/></two></one>".getBytes());
+        privilege.setSpec("{ \"three\": true }");
         application.add(privilege);
 
         application = applicationDAO.save(application);

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index f68e9aa..855894f 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -237,12 +237,10 @@ under the License.
   
   <Application id="mightyApp" description="A cool application"/>
   <Privilege id="postMighty" description="Ability to POST"
-             spec="7B20226D6574686F64223A2022504F5354222C202275726C223A20222F612F622F6322207D"
-             specmimetype="application/json"
+             spec="{ &quot;method&quot;: &quot;POST&quot;, &quot;url&quot;: &quot;/a/b/c&quot; }"
              application_id="mightyApp"/>
   <Privilege id="getMighty" description="Ability to GET"
-             spec="7B20226D6574686F64223A2022474554222C202275726C223A20222F612F622F6322207D"
-             specmimetype="application/json"
+             spec="{ &quot;method&quot;: &quot;GET&quot;, &quot;url&quot;: &quot;/a/b/c&quot; }"
              application_id="mightyApp"/>
 
   <SyncopeRole id="User reviewer"/>

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ApplicationDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ApplicationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ApplicationDataBinderImpl.java
index 635ba57..0fcb38c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ApplicationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ApplicationDataBinderImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.java.data;
 
-import java.util.Base64;
 import java.util.Iterator;
 import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -78,8 +77,7 @@ public class ApplicationDataBinderImpl implements ApplicationDataBinder {
                 }
 
                 privilege.setDescription(privilegeTO.getDescription());
-                privilege.setSpecMimeType(privilegeTO.getSpecMimeType());
-                privilege.setSpec(Base64.getDecoder().decode(privilegeTO.getSpec()));
+                privilege.setSpec(privilegeTO.getSpec());
             }
         });
 
@@ -103,8 +101,7 @@ public class ApplicationDataBinderImpl implements ApplicationDataBinder {
         privilegeTO.setKey(privilege.getKey());
         privilegeTO.setDescription(privilege.getDescription());
         privilegeTO.setApplication(privilege.getApplication().getKey());
-        privilegeTO.setSpecMimeType(privilege.getSpecMimeType());
-        privilegeTO.setSpec(Base64.getEncoder().encodeToString(privilege.getSpec()));
+        privilegeTO.setSpec(privilege.getSpec());
         return privilegeTO;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/fit/console-reference/src/main/resources/console.properties
----------------------------------------------------------------------
diff --git a/fit/console-reference/src/main/resources/console.properties b/fit/console-reference/src/main/resources/console.properties
index bce070a..18c424f 100644
--- a/fit/console-reference/src/main/resources/console.properties
+++ b/fit/console-reference/src/main/resources/console.properties
@@ -37,15 +37,15 @@ flowableModelerDirectory=${flowable-modeler.directory}
 
 reconciliationReportKey=c3520ad9-179f-49e7-b315-d684d216dd97
 
-page.administration=org.apache.syncope.client.console.pages.Administration
 page.dashboard=org.apache.syncope.client.console.pages.Dashboard
 page.realms=org.apache.syncope.client.console.pages.Realms
 page.topology=org.apache.syncope.client.console.topology.Topology
 page.reports=org.apache.syncope.client.console.pages.Reports
 page.workflow=org.apache.syncope.client.console.pages.Workflow
 page.audit=org.apache.syncope.client.console.pages.Audit
+page.implementations=org.apache.syncope.client.console.pages.Implementations
 page.logs=org.apache.syncope.client.console.pages.Logs
-page.securityquestions=org.apache.syncope.client.console.pages.SecurityQuestions
+page.security=org.apache.syncope.client.console.pages.Security
 page.types=org.apache.syncope.client.console.pages.Types
 page.policies=org.apache.syncope.client.console.pages.Policies
 page.notifications=org.apache.syncope.client.console.pages.Notifications

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxBrowseITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxBrowseITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxBrowseITCase.java
index 31d05aa..bcc2c6d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxBrowseITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/AjaxBrowseITCase.java
@@ -25,8 +25,7 @@ import org.apache.syncope.client.console.pages.Notifications;
 import org.apache.syncope.client.console.pages.Policies;
 import org.apache.syncope.client.console.pages.Realms;
 import org.apache.syncope.client.console.pages.Reports;
-import org.apache.syncope.client.console.pages.Administration;
-import org.apache.syncope.client.console.pages.SecurityQuestions;
+import org.apache.syncope.client.console.pages.Security;
 import org.apache.syncope.client.console.pages.Types;
 import org.apache.syncope.client.console.pages.Workflow;
 import org.apache.syncope.client.console.topology.Topology;
@@ -78,14 +77,11 @@ public class AjaxBrowseITCase extends AbstractConsoleITCase {
         TESTER.clickLink("body:configurationLI:configurationUL:logsLI:logs");
         TESTER.assertRenderedPage(Logs.class);
 
-        TESTER.clickLink("body:configurationLI:configurationUL:securityquestionsLI:securityquestions");
-        TESTER.assertRenderedPage(SecurityQuestions.class);
-
         TESTER.clickLink("body:configurationLI:configurationUL:typesLI:types");
         TESTER.assertRenderedPage(Types.class);
 
-        TESTER.clickLink("body:configurationLI:configurationUL:administrationLI:administration");
-        TESTER.assertRenderedPage(Administration.class);
+        TESTER.clickLink("body:configurationLI:configurationUL:securityLI:security");
+        TESTER.assertRenderedPage(Security.class);
 
         TESTER.clickLink("body:configurationLI:configurationUL:policiesLI:policies");
         TESTER.assertRenderedPage(Policies.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/72c5885d/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
index 1f0ec42..25eb447 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RolesITCase.java
@@ -23,7 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.pages.Administration;
+import org.apache.syncope.client.console.pages.Security;
 import org.apache.wicket.Component;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.jupiter.api.BeforeEach;
@@ -34,8 +34,8 @@ public class RolesITCase extends AbstractConsoleITCase {
     @BeforeEach
     public void login() {
         doLogin(ADMIN_UNAME, ADMIN_PWD);
-        TESTER.clickLink("body:configurationLI:configurationUL:administrationLI:administration");
-        TESTER.assertRenderedPage(Administration.class);
+        TESTER.clickLink("body:configurationLI:configurationUL:securityLI:security");
+        TESTER.assertRenderedPage(Security.class);
     }
 
     private void createRole(final String name) {
@@ -57,12 +57,15 @@ public class RolesITCase extends AbstractConsoleITCase {
         formTester.submit("content:form:buttons:next");
 
         formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
+        formTester.submit("content:form:buttons:next");
+
+        formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:form");
         formTester.submit("content:form:buttons:finish");
 
         TESTER.assertInfoMessages("Operation executed successfully");
         TESTER.cleanupFeedbackMessages();
 
-        TESTER.clickLink("body:configurationLI:configurationUL:administrationLI:administration");
+        TESTER.clickLink("body:configurationLI:configurationUL:securityLI:security");
     }
 
     @Test