diff --git a/cli/cmd/role.go b/cli/cmd/role.go
new file mode 100644
index 0000000000000000000000000000000000000000..5e587e05c72fe6e5c730090914dff3217f5b0fb4
--- /dev/null
+++ b/cli/cmd/role.go
@@ -0,0 +1,49 @@
+/*
+Copyright © 2021 da/net Research Group <danet@h-da.de>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package cmd
+
+import (
+	"github.com/spf13/cobra"
+)
+
+//var duid string
+
+// networkElementCmd represents the network element command.
+var roleCmd = &cobra.Command{
+	Use:   "role",
+	Short: "the role command contains all sub-commands for role management",
+	Long:  `The role command contains all sub-commands for role management. It has no functionality in itself.`,
+}
+
+func init() {
+	rootCmd.AddCommand(roleCmd)
+}
diff --git a/cli/cmd/roleCreate.go b/cli/cmd/roleCreate.go
new file mode 100644
index 0000000000000000000000000000000000000000..0fc47dff92e70e5ab5b9a30d2d5c7266d671a2a5
--- /dev/null
+++ b/cli/cmd/roleCreate.go
@@ -0,0 +1,93 @@
+/*
+Copyright © 2021 da/net Research Group <danet@h-da.de>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package cmd
+
+import (
+	"strings"
+
+	"github.com/pterm/pterm"
+	"github.com/spf13/cobra"
+	"github.com/spf13/viper"
+
+	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac"
+	"code.fbi.h-da.de/danet/gosdn/controller/api"
+)
+
+// roleCreateCmd represents the create command.
+var roleCreateCmd = &cobra.Command{
+	Use:   "create",
+	Short: "Creates a role in the controller",
+	Long:  `Creates a role in the controller with the provided permissions as comma separated strings.`,
+
+	Run: func(cmd *cobra.Command, args []string) {
+		spinner, _ := pterm.DefaultSpinner.Start("Creating new role")
+
+		var permissions []string
+		if createRolePermissions != "" {
+			permissions = strings.Split(createRolePermissions, ",")
+		}
+
+		roles := []*rbac.Role{
+			{
+				Name:        createRoleName,
+				Description: createRoleDescription,
+				Permissions: permissions,
+			},
+		}
+
+		_, err := api.CreateRoles(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint"), roles)
+		if err != nil {
+			spinner.Fail(err)
+			return
+		}
+
+		spinner.Success("Roles have been created.")
+	},
+	PostRun: func(cmd *cobra.Command, args []string) {
+		// Necessary for prompt mode. The flag variables have to be resetted,
+		// since in prompt mode the program keeps running.
+
+		createRoleName, createRoleDescription, createRolePermissions = "", "", ""
+	},
+}
+
+var createRoleName string
+var createRoleDescription string
+var createRolePermissions string
+
+func init() {
+	roleCmd.AddCommand(roleCreateCmd)
+
+	roleCreateCmd.Flags().StringVar(&createRoleName, "name", "", "add a name for the role")
+	roleCreateCmd.Flags().StringVar(&createRoleDescription, "description", "", "add a description to the role")
+	roleCreateCmd.Flags().StringVar(&createRolePermissions, "permissions", "", "add multiple permissions separated by comma: --permissions \"p1,p2\"")
+}
diff --git a/cli/cmd/roleGetAll.go b/cli/cmd/roleGetAll.go
new file mode 100644
index 0000000000000000000000000000000000000000..dad97638eb6478e089caac96630ce3bd122b93c3
--- /dev/null
+++ b/cli/cmd/roleGetAll.go
@@ -0,0 +1,72 @@
+/*
+Copyright © 2021 da/net Research Group <danet@h-da.de>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
+
+package cmd
+
+import (
+	"github.com/pterm/pterm"
+	"github.com/spf13/cobra"
+	"github.com/spf13/viper"
+
+	"code.fbi.h-da.de/danet/gosdn/controller/api"
+)
+
+// roleGetAllCmd represents the get all command.
+var roleGetAllCmd = &cobra.Command{
+	Use:   "getAll",
+	Short: "Requests all the available roles.",
+	Long:  `Requests all the available roles.`,
+	Run: func(cmd *cobra.Command, args []string) {
+		spinner, _ := pterm.DefaultSpinner.Start("Fetching roles")
+
+		resp, err := api.GetRoles(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint"))
+		if err != nil {
+			spinner.Fail(err)
+			return
+		}
+
+		data := pterm.TableData{[]string{"Name", "ID", "Description", "Permissions"}}
+		for _, role := range resp.GetRoles() {
+			data = append(data, []string{role.Name, role.Id, role.Description}, role.Permissions)
+		}
+
+		spinner.Success()
+
+		err = pterm.DefaultTable.WithHasHeader().WithData(data).Render()
+		if err != nil {
+			return
+		}
+	},
+}
+
+func init() {
+	roleCmd.AddCommand(roleGetAllCmd)
+}