">
   | <%= content_tag(role.builtin? ? 'em' : 'span', link_to(role.name, edit_role_path(role))) %>+ | +    <% unless role.workflow_rules.exists? || role.builtin? %>
+      
+        <%= l(:text_role_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:role_id => role) %>)
+      
+    <% end %>
+ | <%= reorder_handle(role) unless role.builtin? %>
     <%= link_to l(:button_copy), new_role_path(:copy => role), :class => 'icon icon-copy' %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 74e03d34e..994ab5315 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1130,6 +1130,7 @@ en:
   text_caracters_minimum: "Must be at least %{count} characters long."
   text_length_between: "Length between %{min} and %{max} characters."
   text_tracker_no_workflow: No workflow defined for this tracker
+  text_role_no_workflow: No workflow defined for this role
   text_unallowed_characters: Unallowed characters
   text_comma_separated: Multiple values allowed (comma separated).
   text_line_separated: Multiple values allowed (one line for each value).
diff --git a/test/functional/roles_controller_test.rb b/test/functional/roles_controller_test.rb
index 07167e8be..f401d51d9 100644
--- a/test/functional/roles_controller_test.rb
+++ b/test/functional/roles_controller_test.rb
@@ -35,6 +35,24 @@ class RolesControllerTest < Redmine::ControllerTest
     end
   end
 
+  def test_index_should_show_warning_when_no_workflow_is_defined
+    Role.find_by_name('Developer').workflow_rules.destroy_all
+    Role.find_by_name('Anonymous').workflow_rules.destroy_all
+
+    get :index
+    assert_response :success
+    assert_select 'table.roles' do
+      # Manager
+      assert_select 'tr.givable:nth-of-type(1) span.icon-warning', :count => 0
+      # Developer
+      assert_select 'tr.givable:nth-of-type(2) span.icon-warning', :text => /#{I18n.t(:text_role_no_workflow)}/
+      # Reporter
+      assert_select 'tr.givable:nth-of-type(3) span.icon-warning', :count => 0
+      # No warnings for built-in roles such as Anonymous and Non-member
+      assert_select 'tr.builtin span.icon-warning', :count => 0
+    end
+  end
+
   def test_new
     get :new
     assert_response :success |