Details
                
                    
                    diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js
index 12274e1..df955ad 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js
@@ -137,7 +137,7 @@ module.controller('ApplicationRoleDetailCtrl', function($scope, realm, applicati
             ApplicationRole.update({
                 realm : realm.realm,
                 application : application.name,
-                roleId : role.id
+                role : role.name
             }, $scope.role, function() {
                 $scope.changed = false;
                 role = angular.copy($scope.role);
@@ -160,7 +160,7 @@ module.controller('ApplicationRoleDetailCtrl', function($scope, realm, applicati
             $scope.role.$remove({
                 realm : realm.realm,
                 application : application.name,
-                roleId : $scope.role.id
+                role : $scope.role.name
             }, function() {
                 $location.url("/realms/" + realm.realm + "/applications/" + application.name + "/roles");
                 Notifications.success("The role has been deleted.");
                 
                
                    
                    diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
index f3e3da0..2579f4c 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
@@ -818,7 +818,7 @@ module.controller('RoleDetailCtrl', function($scope, realm, role, Role, $locatio
         } else {
             Role.update({
                 realm : realm.realm,
-                roleId : role.id
+                role : role.name
             }, $scope.role, function() {
                 $scope.changed = false;
                 role = angular.copy($scope.role);
@@ -840,7 +840,7 @@ module.controller('RoleDetailCtrl', function($scope, realm, role, Role, $locatio
         Dialog.confirmDelete($scope.role.name, 'role', function() {
             $scope.role.$remove({
                 realm : realm.realm,
-                roleId : $scope.role.id
+                role : $scope.role.name
             }, function() {
                 $location.url("/realms/" + realm.realm + "/roles");
                 Notifications.success("The role has been deleted.");
                 
                
                    
                    diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/loaders.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/loaders.js
index 84d3251..d22e03b 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/loaders.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/loaders.js
@@ -64,7 +64,7 @@ module.factory('RoleLoader', function(Loader, Role, $route, $q) {
     return Loader.get(Role, function() {
         return {
             realm : $route.current.params.realm,
-            roleId : $route.current.params.role
+            role : $route.current.params.role
         }
     });
 });
@@ -82,7 +82,7 @@ module.factory('ApplicationRoleLoader', function(Loader, ApplicationRole, $route
         return {
             realm : $route.current.params.realm,
             application : $route.current.params.application,
-            roleId : $route.current.params.role
+            role : $route.current.params.role
         }
     });
 });
                 
                
                    
                    diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js
index e3e73b5..d1af959 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js
@@ -184,9 +184,9 @@ module.factory('RealmRoles', function($resource) {
 
 
 module.factory('Role', function($resource) {
-    return $resource('/auth/rest/admin/realms/:realm/roles/:roleId', {
+    return $resource('/auth/rest/admin/realms/:realm/roles/:role', {
         realm : '@realm',
-        roleId : '@roleId'
+        role : '@role'
     },  {
         update : {
             method : 'PUT'
@@ -195,10 +195,10 @@ module.factory('Role', function($resource) {
 });
 
 module.factory('ApplicationRole', function($resource) {
-    return $resource('/auth/rest/admin/realms/:realm/applications/:application/roles/:roleId', {
+    return $resource('/auth/rest/admin/realms/:realm/applications/:application/roles/:role', {
         realm : '@realm',
         application : "@application",
-        roleId : '@roleId'
+        role : '@role'
     },  {
         update : {
             method : 'PUT'
                 
                
                    
                    diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html
index 0561a6c..43fa91e 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/application-role-list.html
@@ -64,7 +64,7 @@
                     </tfoot>
                     <tbody>
                     <tr ng-repeat="role in roles">
-                        <td><a href="#/realms/{{realm.realm}}/applications/{{application.name}}/roles/{{role.id}}">{{role.name}}</a></td>
+                        <td><a href="#/realms/{{realm.realm}}/applications/{{application.name}}/roles/{{role.name}}">{{role.name}}</a></td>
                         <td>{{role.description}}</td>
                     </tr>
                     </tbody>
                 
                
                    
                    diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html
index ae3092d..49d6a9a 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/role-list.html
@@ -64,7 +64,7 @@
                     </tfoot>
                     <tbody>
                     <tr ng-repeat="role in roles">
-                        <td><a href="#/realms/{{realm.realm}}/roles/{{role.id}}">{{role.name}}</a></td>
+                        <td><a href="#/realms/{{realm.realm}}/roles/{{role.name}}">{{role.name}}</a></td>
                         <td>{{role.description}}</td>
                     </tr>
                     </tbody>
                 
                
                    
                    diff --git a/model/api/src/main/java/org/keycloak/models/RoleContainerModel.java b/model/api/src/main/java/org/keycloak/models/RoleContainerModel.java
index cf5748b..a34d4c8 100755
--- a/model/api/src/main/java/org/keycloak/models/RoleContainerModel.java
+++ b/model/api/src/main/java/org/keycloak/models/RoleContainerModel.java
@@ -11,7 +11,7 @@ public interface RoleContainerModel {
 
     RoleModel addRole(String name);
 
-    boolean removeRole(String id);
+    boolean removeRoleById(String id);
 
     List<RoleModel> getRoles();
 
                 
                
                    
                    diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
index c196edd..356fc0c 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
@@ -117,7 +117,7 @@ public class ApplicationAdapter implements ApplicationModel {
     }
 
     @Override
-    public boolean removeRole(String id) {
+    public boolean removeRoleById(String id) {
         RoleEntity role = em.find(RoleEntity.class, id);
         if (role == null) {
             return false;
                 
                
                    
                    diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index ce55d8e..93abb75 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -841,7 +841,7 @@ public class RealmAdapter implements RealmModel {
     }
 
     @Override
-    public boolean removeRole(String id) {
+    public boolean removeRoleById(String id) {
         RoleEntity role = em.find(RoleEntity.class, id);
         if (role == null) {
             return false;
                 
                
                    
                    diff --git a/model/picketlink/src/main/java/org/keycloak/models/picketlink/ApplicationAdapter.java b/model/picketlink/src/main/java/org/keycloak/models/picketlink/ApplicationAdapter.java
index 98a510a..2dc9d63 100755
--- a/model/picketlink/src/main/java/org/keycloak/models/picketlink/ApplicationAdapter.java
+++ b/model/picketlink/src/main/java/org/keycloak/models/picketlink/ApplicationAdapter.java
@@ -156,7 +156,7 @@ public class ApplicationAdapter implements ApplicationModel {
     }
 
     @Override
-    public boolean removeRole(String id) {
+    public boolean removeRoleById(String id) {
         try {
             getIdm().remove(getIdm().lookupIdentityById(Role.class, id));
             return true;
                 
                
                    
                    diff --git a/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java b/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java
index debb246..668b00f 100755
--- a/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java
+++ b/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java
@@ -564,7 +564,7 @@ public class RealmAdapter implements RealmModel {
     }
 
     @Override
-    public boolean removeRole(String id) {
+    public boolean removeRoleById(String id) {
         try {
             getIdm().remove(getIdm().lookupIdentityById(Role.class, id));
             return true;
                 
                
                    
                    diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RoleContainerResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RoleContainerResource.java
index 1e70e6a..6253c7c 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/RoleContainerResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/RoleContainerResource.java
@@ -42,36 +42,40 @@ public class RoleContainerResource {
         return roles;
     }
 
-    @Path("roles/{id}")
+    @Path("roles/{role-name}")
     @GET
     @NoCache
     @Produces("application/json")
-    public RoleRepresentation getRole(final @PathParam("id") String id) {
-        RoleModel roleModel = roleContainer.getRoleById(id);
+    public RoleRepresentation getRole(final @PathParam("role-name") String roleName) {
+        RoleModel roleModel = roleContainer.getRole(roleName);
         if (roleModel == null || roleModel.getName().startsWith(Constants.INTERNAL_ROLE)) {
-            throw new NotFoundException();
+            throw new NotFoundException("Could not find role: " + roleName);
         }
         RoleRepresentation rep = new RoleRepresentation(roleModel.getName(), roleModel.getDescription());
         rep.setId(roleModel.getId());
         return rep;
     }
 
-    @Path("roles/{id}")
+    @Path("roles/{role-name}")
     @DELETE
     @NoCache
-    public void deleteRole(final @PathParam("id") String id) {
-        if (!roleContainer.removeRole(id)) {
+    public void deleteRole(final @PathParam("role-name") String roleName) {
+        RoleModel role = roleContainer.getRole(roleName);
+        if (role == null) {
+            throw new NotFoundException("Could not find role: " + roleName);
+        }
+        if (!roleContainer.removeRoleById(role.getId())) {
             throw new NotFoundException();
         }
     }
 
-    @Path("roles/{id}")
+    @Path("roles/{role-name}")
     @PUT
     @Consumes("application/json")
-    public void updateRole(final @PathParam("id") String id, final RoleRepresentation rep) {
-        RoleModel role = roleContainer.getRoleById(id);
+    public void updateRole(final @PathParam("role-name") String roleName, final RoleRepresentation rep) {
+        RoleModel role = roleContainer.getRole(roleName);
         if (role == null || role.getName().startsWith(Constants.INTERNAL_ROLE)) {
-            throw new NotFoundException();
+            throw new NotFoundException("Could not find role: " + roleName);
         }
         role.setName(rep.getName());
         role.setDescription(rep.getDescription());
@@ -89,6 +93,6 @@ public class RoleContainerResource {
             throw new NotFoundException();
         }
         role.setDescription(rep.getDescription());
-        return Response.created(uriInfo.getAbsolutePathBuilder().path(role.getId()).build()).build();
+        return Response.created(uriInfo.getAbsolutePathBuilder().path(role.getName()).build()).build();
     }
 }
                 
                
                    
                    diff --git a/services/src/test/java/org/keycloak/test/AdapterTest.java b/services/src/test/java/org/keycloak/test/AdapterTest.java
index 0bcfbc5..b3e760d 100755
--- a/services/src/test/java/org/keycloak/test/AdapterTest.java
+++ b/services/src/test/java/org/keycloak/test/AdapterTest.java
@@ -273,12 +273,12 @@ public class AdapterTest extends AbstractKeycloakTest {
         RoleModel realmRole = realmModel.addRole("test");
         realmModel.addScopeMapping(app.getApplicationUser(), realmRole);
 
-        Assert.assertTrue(realmModel.removeRole(realmRole.getId()));
-        Assert.assertFalse(realmModel.removeRole(realmRole.getId()));
+        Assert.assertTrue(realmModel.removeRoleById(realmRole.getId()));
+        Assert.assertFalse(realmModel.removeRoleById(realmRole.getId()));
         Assert.assertNull(realmModel.getRole(realmRole.getName()));
 
-        Assert.assertTrue(app.removeRole(appRole.getId()));
-        Assert.assertFalse(app.removeRole(appRole.getId()));
+        Assert.assertTrue(app.removeRoleById(appRole.getId()));
+        Assert.assertFalse(app.removeRoleById(appRole.getId()));
         Assert.assertNull(app.getRole(appRole.getName()));
     }