)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"932304c388864b65e28fd944686a3b2352d4def1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Because of hardcoding name as the \u0027admin\u0027 was impossible to"},{"line_number":10,"context_line":"use administrative panel with a custom administrative role name."},{"line_number":11,"context_line":"This fix replaces hardcoding the name of the administrative role"},{"line_number":12,"context_line":"with the settings constant."},{"line_number":13,"context_line":"Related commit: https://review.openstack.org/#/c/123745/"},{"line_number":14,"context_line":"Change-Id: I05c8fc750c56f6f6bb49a435662e821eb0d6ba30"},{"line_number":15,"context_line":"Closes-Bug: #1161144"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"da9df570_1a5d9815","line":12,"updated":"2014-09-26 15:18:53.000000000","message":"Please add a newline (either before or after the \"related commit\" line) to separate the message from the Change-Id and Closes-Bug.","commit_id":"45222c037a486895435d616d163f2ac4be31e454"}],"doc/source/quickstart.rst":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"0010e3595819ac0778f73370cbe093070e416b3c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    class Images(horizon.Panel):"},{"line_number":220,"context_line":"        name \u003d \"Images\""},{"line_number":221,"context_line":"        slug \u003d \u0027images\u0027"},{"line_number":222,"context_line":"        permissions \u003d (\u0027my.openstack.permission\u0027,)"},{"line_number":223,"context_line":"        policy_rules \u003d ((\u0027endpoint\u0027, \u0027endpoint:rule\u0027),)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9aa7fdbe_bcab031d","line":222,"updated":"2014-10-21 23:15:35.000000000","message":"The example was trying to demonstrate triggering on a particular role, does not need to be admin, but I\u0027d like to see the example hold. The two formats that are supported are roles and services. We should stick to those formats in the example.\n\nSee: https://github.com/openstack/django_openstack_auth/blob/master/openstack_auth/backend.py#L182","commit_id":"2ac484d635027760fbff323ce3ddb283f78b2aeb"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"5b71775a8338b11483bf994c77f345ec27b589a2","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    class Images(horizon.Panel):"},{"line_number":220,"context_line":"        name \u003d \"Images\""},{"line_number":221,"context_line":"        slug \u003d \u0027images\u0027"},{"line_number":222,"context_line":"        permissions \u003d (\u0027my.openstack.permission\u0027,)"},{"line_number":223,"context_line":"        policy_rules \u003d ((\u0027endpoint\u0027, \u0027endpoint:rule\u0027),)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9aa7fdbe_b1f8817d","line":222,"in_reply_to":"9aa7fdbe_76e9af7f","updated":"2014-10-22 09:05:15.000000000","message":"AFAIU, the example needs to demonstrate two kinds of permissions, e.g. \u0027openstack.roles.my_custom_role\u0027 and \u0027my.openstack.service_permission\u0027.\n\nWhile it\u0027s possible to replace all role-based permissions with policies, until it happens it\u0027s better to keep the role permission example.","commit_id":"2ac484d635027760fbff323ce3ddb283f78b2aeb"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"92488db25449c4ef679ce665cbf695044454b66e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    class Images(horizon.Panel):"},{"line_number":220,"context_line":"        name \u003d \"Images\""},{"line_number":221,"context_line":"        slug \u003d \u0027images\u0027"},{"line_number":222,"context_line":"        permissions \u003d (\u0027my.openstack.permission\u0027,)"},{"line_number":223,"context_line":"        policy_rules \u003d ((\u0027endpoint\u0027, \u0027endpoint:rule\u0027),)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9aa7fdbe_8c160454","line":222,"in_reply_to":"9aa7fdbe_bcab031d","updated":"2014-10-22 09:44:14.000000000","message":"Done","commit_id":"2ac484d635027760fbff323ce3ddb283f78b2aeb"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"9e905f16762f354f9e21a061f86c3f1042589414","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    class Images(horizon.Panel):"},{"line_number":220,"context_line":"        name \u003d \"Images\""},{"line_number":221,"context_line":"        slug \u003d \u0027images\u0027"},{"line_number":222,"context_line":"        permissions \u003d (\u0027my.openstack.permission\u0027,)"},{"line_number":223,"context_line":"        policy_rules \u003d ((\u0027endpoint\u0027, \u0027endpoint:rule\u0027),)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9aa7fdbe_76e9af7f","line":222,"in_reply_to":"9aa7fdbe_bcab031d","updated":"2014-10-22 08:41:06.000000000","message":"So I should change this line to\n\npermissions \u003d ( \u0027openstack.{{ role.name }}\u0027)\n\n, do I understand you correctly?","commit_id":"2ac484d635027760fbff323ce3ddb283f78b2aeb"}],"openstack_dashboard/dashboards/admin/dashboard.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"acd59209c0e897fdcad8c7fd0995fff52dd8555f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from django.utils.translation import ugettext_lazy as _"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import horizon"},{"line_number":18,"context_line":"from openstack_dashboard.policy import get_keystone_admin_role"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class SystemPanels(horizon.PanelGroup):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_36f59983","line":18,"updated":"2014-09-30 11:33:27.000000000","message":"Please do not use attribute-level import.\n\n  from openstack_dashboard import policy","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"a7e1e081bef87437e441e65b80e02be36fdd4542","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    slug \u003d \"admin\""},{"line_number":31,"context_line":"    panels \u003d (SystemPanels,)"},{"line_number":32,"context_line":"    default_panel \u003d \u0027overview\u0027"},{"line_number":33,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_c2be1900","line":33,"updated":"2014-12-18 02:00:19.000000000","message":"This roles does not map 1:1 with admin of the service groups. At this point, I\u0027m not sure we can make this change.","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"},{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"7aea52ecc681707279d0a0f0513337a49ca53897","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    slug \u003d \"admin\""},{"line_number":31,"context_line":"    panels \u003d (SystemPanels,)"},{"line_number":32,"context_line":"    default_panel \u003d \u0027overview\u0027"},{"line_number":33,"context_line":"    permissions \u003d (\u0027openstack.roles.admin\u0027,)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_2cdf030e","side":"PARENT","line":33,"updated":"2015-06-25 08:36:06.000000000","message":"A possible solution is add:\n\n  policy_rules \u003d ((\"identity\", \"admin_required\"),)\n\nSo the user have a chance to extend this rule to address more king of admins inside the policy file","commit_id":"959829200ebfb2b6cadf94da8d255d563b3d0481"},{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"6cdc22aa8d28d55cfb3ea4f0f4a93c6f3e6b37cb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    slug \u003d \"admin\""},{"line_number":31,"context_line":"    panels \u003d (SystemPanels,)"},{"line_number":32,"context_line":"    default_panel \u003d \u0027overview\u0027"},{"line_number":33,"context_line":"    permissions \u003d (\u0027openstack.roles.admin\u0027,)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_e9382df0","side":"PARENT","line":33,"updated":"2015-06-25 08:21:18.000000000","message":"Removing this shows the admin panel in normal users.  Do we need to update the identity.json file if we want to remove this permission?","commit_id":"959829200ebfb2b6cadf94da8d255d563b3d0481"},{"author":{"_account_id":13404,"name":"Alberto Planas","email":"aplanas@gmail.com","username":"aplanas"},"change_message_id":"e9454b56416419897f4ee26afea122cef93f9cf3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    permissions \u003d (\u0027openstack.roles.admin\u0027,)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_33d38061","side":"PARENT","line":23,"updated":"2015-08-10 13:14:35.000000000","message":"I still think that something like is needed:\n\n    policy_rules \u003d ((\"identity\", \"admin_required\"),)","commit_id":"1fdc083842eb7b569a71093d3e65141659652cb9"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"969b86b7cee016b4646a5ecd7f7da0d091915249","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    permissions \u003d (\u0027openstack.roles.admin\u0027,)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a4dcd0f_0d297d37","side":"PARENT","line":23,"in_reply_to":"1a4dcd0f_33d38061","updated":"2015-08-10 14:41:06.000000000","message":"Looks like you are right. Thank you, done.","commit_id":"1fdc083842eb7b569a71093d3e65141659652cb9"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"f86065b16b4125b1c3435932fdeb1f784d13bbcb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba8a016a_5b5f6b72","line":23,"updated":"2015-11-16 21:05:16.000000000","message":"I don\u0027t think this check is sufficient. In reality, the adminness of a user for identity has no direct correlation to their adminness on another service like say compute. That is the current check though, so for now this is probably a good substitute.\n\nMy other concern is around policy being turned off. The this dashboard will be displayed all the time and lead to many logouts for users that are not \"admin\". I don\u0027t have a great fix for that either, but possibly check for whether the POLICY_CHECK_FUNCTION is defined, if so then set policy_rules, otherwise set permissions?","commit_id":"dee258954036306c0eaaac55e9d8ed0bf319baab"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"0327b945b99a322476667d6dc46fc5274db2925a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a8ffd7b_95b5c47f","line":23,"in_reply_to":"9a8ffd7b_124ecac1","updated":"2015-11-24 11:44:39.000000000","message":"Yes, that\u0027s true. So 2 things need to be done here: more rules + safeguarding against policy engine being turned off.","commit_id":"dee258954036306c0eaaac55e9d8ed0bf319baab"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"1d9da488add8fed5a106fc66d89dad181ad638b6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba8a016a_dee64d43","line":23,"in_reply_to":"ba8a016a_5b5f6b72","updated":"2015-11-19 11:36:55.000000000","message":"But if so, other dashboards could lead to the same behaviour with logging user out. So we need to place such check for all dashboards. Or I\u0027m missing something?","commit_id":"dee258954036306c0eaaac55e9d8ed0bf319baab"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"d147f41209f78f8eb3e410070776b8f5ac6b2e77","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9a8ffd7b_124ecac1","line":23,"in_reply_to":"ba8a016a_b9c43892","updated":"2015-11-24 11:24:13.000000000","message":"But if we use OR policy rules, we still using policy rules and still having issue if policies are turned off, don\u0027t we?","commit_id":"dee258954036306c0eaaac55e9d8ed0bf319baab"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"a54c26544b6b9aed96309c15615c4458299378b6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class Admin(horizon.Dashboard):"},{"line_number":21,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":22,"context_line":"    slug \u003d \"admin\""},{"line_number":23,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Admin)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba8a016a_b9c43892","line":23,"in_reply_to":"ba8a016a_dee64d43","updated":"2015-11-23 12:08:20.000000000","message":"No, we don\u0027t need that. Only Admin dashboard requires special permissions/policy rules, while any other dashboard is accessible to any user. Identity dashboard would be rather limited for non-admins, but it\u0027s still accessible.\n\nAs for the first David\u0027s suggestion, I think it makes sense to OR policy rules for different OpenStack services which have a related panels in Admin dashboard - something like\n\n  ((\u0027identity\u0027, \u0027admin_required\u0027),\n   (\u0027image\u0027, \u0027context_is_admin\u0027),\n   (\u0027volume\u0027, \u0027context_is_admin\u0027), ...)","commit_id":"dee258954036306c0eaaac55e9d8ed0bf319baab"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"752feb7ace07e3e686c777c4fa40530d77d36d77","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":23,"context_line":"    slug \u003d \"admin\""},{"line_number":24,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # def __init__(self):"},{"line_number":27,"context_line":"    #     super(Admin, self).__init__()"},{"line_number":28,"context_line":"    #     self.name \u003d _(\"Admin\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"da0c15f0_f6544755","line":25,"updated":"2016-03-25 22:27:33.000000000","message":"I think this might be work in progress?","commit_id":"96dbe7ad4f2e358f3ee1f897d229bc90e970a4e6"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"fc40e8f1b6bbb827a81358783221ede28d310742","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":23,"context_line":"    slug \u003d \"admin\""},{"line_number":24,"context_line":"    policy_rules \u003d ((\"identity\", \"admin_required\"),)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # def __init__(self):"},{"line_number":27,"context_line":"    #     super(Admin, self).__init__()"},{"line_number":28,"context_line":"    #     self.name \u003d _(\"Admin\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"da0c15f0_e95a7c4f","line":25,"in_reply_to":"da0c15f0_f6544755","updated":"2016-03-29 12:07:46.000000000","message":"Sure. I just trying to find out a clear way to dynamically add policy_rules field and do not break everything.","commit_id":"96dbe7ad4f2e358f3ee1f897d229bc90e970a4e6"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"ec7c6670e3345444c119314e4268102338f598f8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":23,"context_line":"    slug \u003d \"admin\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    if settings.POLICY_CHECK_FUNCTION:"},{"line_number":26,"context_line":"        policy_rules \u003d ((\u0027identity\u0027, \u0027admin_required\u0027),"},{"line_number":27,"context_line":"                        (\u0027image\u0027, \u0027context_is_admin\u0027),"},{"line_number":28,"context_line":"                        (\u0027volume\u0027, \u0027context_is_admin\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bab6814e_6d2fe7f6","line":25,"updated":"2016-05-24 16:01:42.000000000","message":"The else: branch here is not safe, if POLICY_CHECK_FUNCTION (which is not a boolean value) is not set, you\u0027ll get an exception. I\u0027d rather use \n\n  if getattr(settings, \u0027POLICY_CHECK_FUNCTION\u0027, None):\n\nhere","commit_id":"20ced7de7e573bbf7fdfeecf92fcf8c58ffaf2a4"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"d6eb78c96126f84e4da8db9b524233b5667f3b08","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    name \u003d _(\"Admin\")"},{"line_number":23,"context_line":"    slug \u003d \"admin\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    if settings.POLICY_CHECK_FUNCTION:"},{"line_number":26,"context_line":"        policy_rules \u003d ((\u0027identity\u0027, \u0027admin_required\u0027),"},{"line_number":27,"context_line":"                        (\u0027image\u0027, \u0027context_is_admin\u0027),"},{"line_number":28,"context_line":"                        (\u0027volume\u0027, \u0027context_is_admin\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"bab6814e_11ad229b","line":25,"in_reply_to":"bab6814e_6d2fe7f6","updated":"2016-05-26 13:23:52.000000000","message":"Done","commit_id":"20ced7de7e573bbf7fdfeecf92fcf8c58ffaf2a4"}],"openstack_dashboard/dashboards/admin/hypervisors/panel.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"a7e1e081bef87437e441e65b80e02be36fdd4542","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    name \u003d _(\"Hypervisors\")"},{"line_number":23,"context_line":"    slug \u003d \u0027hypervisors\u0027"},{"line_number":24,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":25,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"dashboard.Admin.register(Hypervisors)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_02e2e12e","line":25,"updated":"2014-12-18 02:00:19.000000000","message":"unfortunately this admin does not necessarily map to compute admin. If anything we\u0027d need to call compute:context_is_admin","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"bf92939e788efe6410ffbf7e26f9c35bb54a1cec","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    name \u003d _(\"Hypervisors\")"},{"line_number":23,"context_line":"    slug \u003d \u0027hypervisors\u0027"},{"line_number":24,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":25,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027compute:context_is_admin\u0027),)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"dashboard.Admin.register(Hypervisors)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_6fb4c5d1","line":25,"updated":"2015-02-06 17:55:16.000000000","message":"this should check against the api call in the hypervisors panel.","commit_id":"de128e7d7e9b6a23bfb939de6b141cc892044a88"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"9b9bacfdcb12f0243f310579a4fcb0d57c5880c8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    name \u003d _(\"Hypervisors\")"},{"line_number":22,"context_line":"    slug \u003d \u0027hypervisors\u0027"},{"line_number":23,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":24,"context_line":"    policy_rules \u003d ((\"compute\", \"compute_extenson:hypervisors\"),)"}],"source_content_type":"text/x-python","patch_set":31,"id":"da85f559_ed40e937","line":24,"updated":"2015-11-13 11:01:18.000000000","message":"Looks like mistake. extenson-\u003eextension","commit_id":"b4b25b76cc5a970aaf7c8ad21b33bc51c3bd3d9d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"4455ff2a1d4ba63c5cad64381a3dd23bad241fa3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    name \u003d _(\"Hypervisors\")"},{"line_number":22,"context_line":"    slug \u003d \u0027hypervisors\u0027"},{"line_number":23,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":24,"context_line":"    policy_rules \u003d ((\"compute\", \"compute_extenson:hypervisors\"),)"}],"source_content_type":"text/x-python","patch_set":31,"id":"da85f559_301f2a5d","line":24,"in_reply_to":"da85f559_ed40e937","updated":"2015-11-13 11:20:34.000000000","message":"Good catch.","commit_id":"b4b25b76cc5a970aaf7c8ad21b33bc51c3bd3d9d"}],"openstack_dashboard/dashboards/admin/instances/panel.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"a7e1e081bef87437e441e65b80e02be36fdd4542","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Instances\")"},{"line_number":28,"context_line":"    slug \u003d \u0027instances\u0027"},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"dashboard.Admin.register(Instances)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_02b90115","line":30,"updated":"2014-12-18 02:00:19.000000000","message":"see previous file\u0027s comment, these are not equivalent.","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"8133ae55a14e6d118be3fdd9367ff0bfa5b987a6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Instances\")"},{"line_number":28,"context_line":"    slug \u003d \u0027instances\u0027"},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027compute:context_is_admin\u0027),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"dashboard.Admin.register(Instances)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_5c24eac5","line":30,"updated":"2015-02-09 15:14:32.000000000","message":"this is still wrong, should be something more like ((\"compute\", \"compute:get_all\"),)\n\nThere may be more rules as well. I\u0027d have to verify.\n\nThe best way to make sure these are correct is instrument the policy code in the services.","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"8ec217fc5114d00ba88cd172bea6e6bcbbe2cc0c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    name \u003d _(\"Instances\")"},{"line_number":28,"context_line":"    slug \u003d \u0027instances\u0027"},{"line_number":29,"context_line":"    permissions \u003d (\u0027openstack.services.compute\u0027,)"},{"line_number":30,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027compute:context_is_admin\u0027),)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"dashboard.Admin.register(Instances)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_3ce9c980","line":30,"in_reply_to":"da86d52c_5c24eac5","updated":"2015-02-11 15:55:51.000000000","message":"Done","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"}],"openstack_dashboard/dashboards/admin/instances/views.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"bf92939e788efe6410ffbf7e26f9c35bb54a1cec","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def get_data(self):"},{"line_number":74,"context_line":"        instances \u003d []"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"identity\", \"identity:is_admin\"),), self.request):"},{"line_number":77,"context_line":"            msg \u003d _(\"Insufficient privilege level to view domain information.\")"},{"line_number":78,"context_line":"            messages.info(self.request, msg)"},{"line_number":79,"context_line":"            return instances"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_6fe125fe","line":76,"updated":"2015-02-06 17:55:16.000000000","message":"this view is governed by the rule (\"compute\", \"compute:get_all\") or (\"compute\", \"compute:get_all_tenants\"), I\u0027m not sure which with instrumenting nova to determine which call is being made.","commit_id":"de128e7d7e9b6a23bfb939de6b141cc892044a88"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"bf92939e788efe6410ffbf7e26f9c35bb54a1cec","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        instances \u003d []"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"identity\", \"identity:is_admin\"),), self.request):"},{"line_number":77,"context_line":"            msg \u003d _(\"Insufficient privilege level to view domain information.\")"},{"line_number":78,"context_line":"            messages.info(self.request, msg)"},{"line_number":79,"context_line":"            return instances"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_2fbe4dd5","line":77,"updated":"2015-02-06 17:55:16.000000000","message":"domain plays no factor at this point.","commit_id":"de128e7d7e9b6a23bfb939de6b141cc892044a88"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"8133ae55a14e6d118be3fdd9367ff0bfa5b987a6","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_data(self):"},{"line_number":74,"context_line":"        instances \u003d []"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"compute\", \"compute:get_all\"),),"},{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view tenants information.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_1c127262","line":75,"updated":"2015-02-09 15:14:32.000000000","message":"this should be the policy_rule for the panel","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"8ec217fc5114d00ba88cd172bea6e6bcbbe2cc0c","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_data(self):"},{"line_number":74,"context_line":"        instances \u003d []"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"compute\", \"compute:get_all\"),),"},{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view tenants information.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_a1d672c1","line":75,"in_reply_to":"da86d52c_1c127262","updated":"2015-02-11 15:55:51.000000000","message":"Done","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"458bdbeb022b53cdbd9fabcefa5f246e6bf1a470","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def get_data(self):"},{"line_number":74,"context_line":"        instances \u003d []"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"compute\", \"compute:get_all\"),),"},{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view \""},{"line_number":79,"context_line":"                    \"tenants information.\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_aca8fd20","line":76,"updated":"2015-03-06 16:01:19.000000000","message":"actually, can\u0027t this check be avoided by adding policy_rules to openstack_dashboard/dashboards/admin/instances/panel.py?","commit_id":"4378d408f2de4f8673e40416b216ffebb808ba44"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"86663357c097126808db9e41ed2b3500cd45a02b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def get_data(self):"},{"line_number":74,"context_line":"        instances \u003d []"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"compute\", \"compute:get_all\"),),"},{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view \""},{"line_number":79,"context_line":"                    \"tenants information.\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6ced46_db947739","line":76,"in_reply_to":"9a80dd14_aca8fd20","updated":"2015-03-23 14:54:02.000000000","message":"Yep, you\u0027re right, thanks!","commit_id":"4378d408f2de4f8673e40416b216ffebb808ba44"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"458bdbeb022b53cdbd9fabcefa5f246e6bf1a470","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not policy.check(((\"compute\", \"compute:get_all\"),),"},{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view \""},{"line_number":79,"context_line":"                    \"tenants information.\")"},{"line_number":80,"context_line":"            messages.info(self.request, msg)"},{"line_number":81,"context_line":"            return instances"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_cca8d179","line":78,"updated":"2015-03-06 16:01:19.000000000","message":"What about \"Policy check failed for viewing admin instances table\" for more consistency with \"Policy check failed\" message shown elsewhere?","commit_id":"4378d408f2de4f8673e40416b216ffebb808ba44"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"458bdbeb022b53cdbd9fabcefa5f246e6bf1a470","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view \""},{"line_number":79,"context_line":"                    \"tenants information.\")"},{"line_number":80,"context_line":"            messages.info(self.request, msg)"},{"line_number":81,"context_line":"            return instances"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        marker \u003d self.request.GET.get("}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_6cdfe569","line":80,"updated":"2015-03-06 16:01:19.000000000","message":"I think this should be a warning or error rather than info","commit_id":"4378d408f2de4f8673e40416b216ffebb808ba44"},{"author":{"_account_id":6763,"name":"jingliuqing","email":"jing.liuqing@99cloud.net","username":"jing"},"change_message_id":"f1c18ca609eb3dc2e26f5c95ac16383a2022de51","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            self.request):"},{"line_number":78,"context_line":"            msg \u003d _(\"Insufficient privilege level to view \""},{"line_number":79,"context_line":"                    \"tenants information.\")"},{"line_number":80,"context_line":"            messages.info(self.request, msg)"},{"line_number":81,"context_line":"            return instances"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        marker \u003d self.request.GET.get("}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_e1b3a54a","line":80,"in_reply_to":"9a80dd14_6cdfe569","updated":"2015-03-09 14:03:39.000000000","message":"+1 for Doug, use error or warning msg","commit_id":"4378d408f2de4f8673e40416b216ffebb808ba44"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"6b1d6198cf1b5542906a9d96e9b7ff2d47d9e736","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def get_data(self):"},{"line_number":72,"context_line":"        instances \u003d []"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        marker \u003d self.request.GET.get("},{"line_number":75,"context_line":"            project_tables.AdminInstancesTable._meta.pagination_param, None)"},{"line_number":76,"context_line":"        search_opts \u003d self.get_filters({\u0027marker\u0027: marker, \u0027paginate\u0027: True})"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_75e8a210","line":73,"updated":"2015-03-25 03:30:49.000000000","message":"irrelevant change.","commit_id":"2debe8acf4753d9ffa1f95d05d02e54171c9aafd"}],"openstack_dashboard/dashboards/admin/metadata_defs/panel.py":[{"author":{"_account_id":9647,"name":"Justin Pomeroy","email":"jpomero@linux.vnet.ibm.com","username":"jpomero"},"change_message_id":"9a4bc42e3a03a562547dd73a23b0cd5130becf17","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class MetadataDefinitions(horizon.Panel):"},{"line_number":24,"context_line":"    name \u003d _(\"Metadata Definitions\")"},{"line_number":25,"context_line":"    slug \u003d \u0027metadata_defs\u0027"},{"line_number":26,"context_line":"    policy_rules \u003d (\u0027get_metadef_namespaces\u0027,)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @staticmethod"},{"line_number":29,"context_line":"    def can_register():"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a4dcd0f_f2fdbcb1","line":26,"updated":"2015-08-11 19:58:50.000000000","message":"I might be mistaken but shouldn\u0027t this be something like ((\"image\", \"get_metadef_namespaces\"),)","commit_id":"4c3711105b57884b2e4622d826cf0e10c5a8bd20"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"d219778eeaabe18b6f14e78d8f1581b5fe2d2605","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class MetadataDefinitions(horizon.Panel):"},{"line_number":24,"context_line":"    name \u003d _(\"Metadata Definitions\")"},{"line_number":25,"context_line":"    slug \u003d \u0027metadata_defs\u0027"},{"line_number":26,"context_line":"    policy_rules \u003d (\u0027get_metadef_namespaces\u0027,)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @staticmethod"},{"line_number":29,"context_line":"    def can_register():"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa1b9901_d57f16a9","line":26,"in_reply_to":"1a4dcd0f_f2fdbcb1","updated":"2015-08-26 15:04:44.000000000","message":"Done","commit_id":"4c3711105b57884b2e4622d826cf0e10c5a8bd20"}],"openstack_dashboard/dashboards/admin/metering/panel.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"a7e1e081bef87437e441e65b80e02be36fdd4542","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    name \u003d _(\"Resource Usage\")"},{"line_number":21,"context_line":"    slug \u003d \u0027metering\u0027"},{"line_number":22,"context_line":"    permissions \u003d (\u0027openstack.services.metering\u0027,)"},{"line_number":23,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"dashboard.Admin.register(Metering)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_025021d3","line":23,"updated":"2014-12-18 02:00:19.000000000","message":"same comment, but the rule is ceilometer\u0027s admin role","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"8133ae55a14e6d118be3fdd9367ff0bfa5b987a6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class Metering(horizon.Panel):"},{"line_number":20,"context_line":"    name \u003d _(\"Resource Usage\")"},{"line_number":21,"context_line":"    slug \u003d \u0027metering\u0027"},{"line_number":22,"context_line":"    permissions \u003d (\u0027openstack.services.metering\u0027,)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"dashboard.Admin.register(Metering)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_ff03d00a","line":22,"updated":"2015-02-09 15:14:32.000000000","message":"don\u0027t change this one, my patch will update this.","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"8ec217fc5114d00ba88cd172bea6e6bcbbe2cc0c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class Metering(horizon.Panel):"},{"line_number":20,"context_line":"    name \u003d _(\"Resource Usage\")"},{"line_number":21,"context_line":"    slug \u003d \u0027metering\u0027"},{"line_number":22,"context_line":"    permissions \u003d (\u0027openstack.services.metering\u0027,)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"dashboard.Admin.register(Metering)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_7ca3419e","line":22,"in_reply_to":"da86d52c_ff03d00a","updated":"2015-02-11 15:55:51.000000000","message":"Ok, but if I leave it without changes, my patch wouldn\u0027t close bug, because \u0027\u0027openstack.roles.admin\u0027 is hardcode admin role name. So it would be prtial bug, os somethink like this?","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"}],"openstack_dashboard/dashboards/admin/overview/panel.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"a7e1e081bef87437e441e65b80e02be36fdd4542","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Overview(horizon.Panel):"},{"line_number":27,"context_line":"    name \u003d _(\"Overview\")"},{"line_number":28,"context_line":"    slug \u003d \u0027overview\u0027"},{"line_number":29,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"dashboard.Admin.register(Overview)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_e2195523","line":29,"updated":"2014-12-18 02:00:19.000000000","message":"This one is complicated because many services are called. So many admin roles will need to be checked.","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"bf92939e788efe6410ffbf7e26f9c35bb54a1cec","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Overview(horizon.Panel):"},{"line_number":27,"context_line":"    name \u003d _(\"Overview\")"},{"line_number":28,"context_line":"    slug \u003d \u0027overview\u0027"},{"line_number":29,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"dashboard.Admin.register(Overview)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_4f81c1fa","line":29,"updated":"2015-02-06 17:55:16.000000000","message":"this is a more complicated check. you need permission for at least one api call made in the overview panel.","commit_id":"de128e7d7e9b6a23bfb939de6b141cc892044a88"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"6f723067de67fb90766e6bba20c4e2b5ead08c23","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Overview(horizon.Panel):"},{"line_number":27,"context_line":"    name \u003d _(\"Overview\")"},{"line_number":28,"context_line":"    slug \u003d \u0027overview\u0027"},{"line_number":29,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:list_projects\u0027),)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"dashboard.Admin.register(Overview)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_1e611839","line":29,"updated":"2015-02-11 16:25:53.000000000","message":"I think limits rule from nova would be required too.","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"e08ddfab7e8128ebda701cd43160528165877c55","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Overview(horizon.Panel):"},{"line_number":27,"context_line":"    name \u003d _(\"Overview\")"},{"line_number":28,"context_line":"    slug \u003d \u0027overview\u0027"},{"line_number":29,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:list_projects\u0027),)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"dashboard.Admin.register(Overview)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_f8d50a43","line":29,"in_reply_to":"da86d52c_1e611839","updated":"2015-02-12 14:50:03.000000000","message":"Ignore this comment.","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"}],"openstack_dashboard/dashboards/router/dashboard.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"8133ae55a14e6d118be3fdd9367ff0bfa5b987a6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    slug \u003d \"router\""},{"line_number":21,"context_line":"    panels \u003d (\u0027nexus1000v\u0027,)"},{"line_number":22,"context_line":"    default_panel \u003d \u0027nexus1000v\u0027"},{"line_number":23,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Router)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_bf3078e9","line":23,"updated":"2015-02-09 15:14:32.000000000","message":"again, identity admin role has nothing to do with whether I can view router hardware details. This will be a neutron policy rule check.","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"8ec217fc5114d00ba88cd172bea6e6bcbbe2cc0c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    slug \u003d \"router\""},{"line_number":21,"context_line":"    panels \u003d (\u0027nexus1000v\u0027,)"},{"line_number":22,"context_line":"    default_panel \u003d \u0027nexus1000v\u0027"},{"line_number":23,"context_line":"    policy_rules \u003d ((\u0027identity\u0027, \u0027identity:admin_required\u0027),)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"horizon.register(Router)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_c48974cb","line":23,"in_reply_to":"da86d52c_bf3078e9","updated":"2015-02-11 15:55:51.000000000","message":"Done","commit_id":"f0eede23795c290937f88bbb93dffa80d59a8651"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"9da4b91a1b6185e2e82b20bd2945d6258c2a0301","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    name \u003d _(\"Router\")"},{"line_number":20,"context_line":"    slug \u003d \"router\""},{"line_number":21,"context_line":"    panels \u003d (\u0027nexus1000v\u0027,)"},{"line_number":22,"context_line":"    default_panel \u003d \u0027nexus1000v\u0027"},{"line_number":23,"context_line":"    policy_rules \u003d ((\u0027neutron\u0027, \u0027get_router\u0027),"},{"line_number":24,"context_line":"                    (\u0027neutron\u0027, \u0027get_router:ha\u0027),"},{"line_number":25,"context_line":"                    (\u0027neutron\u0027, \u0027get_router:distributed\u0027),"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_8fadd586","line":22,"updated":"2015-02-11 16:01:54.000000000","message":"These rules I\u0027ve got with sniffing neutron policy check while loading Routers tab.","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"5faa60a1352adfa71fa511248ede0b66fc660aad","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    name \u003d _(\"Router\")"},{"line_number":20,"context_line":"    slug \u003d \"router\""},{"line_number":21,"context_line":"    panels \u003d (\u0027nexus1000v\u0027,)"},{"line_number":22,"context_line":"    default_panel \u003d \u0027nexus1000v\u0027"},{"line_number":23,"context_line":"    policy_rules \u003d ((\u0027neutron\u0027, \u0027get_router\u0027),"},{"line_number":24,"context_line":"                    (\u0027neutron\u0027, \u0027get_router:ha\u0027),"},{"line_number":25,"context_line":"                    (\u0027neutron\u0027, \u0027get_router:distributed\u0027),"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_2cccc0ba","line":22,"in_reply_to":"da86d52c_8fadd586","updated":"2015-02-12 15:47:23.000000000","message":"Done","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"6f723067de67fb90766e6bba20c4e2b5ead08c23","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    slug \u003d \"router\""},{"line_number":21,"context_line":"    panels \u003d (\u0027nexus1000v\u0027,)"},{"line_number":22,"context_line":"    default_panel \u003d \u0027nexus1000v\u0027"},{"line_number":23,"context_line":"    policy_rules \u003d ((\u0027neutron\u0027, \u0027get_router\u0027),"},{"line_number":24,"context_line":"                    (\u0027neutron\u0027, \u0027get_router:ha\u0027),"},{"line_number":25,"context_line":"                    (\u0027neutron\u0027, \u0027get_router:distributed\u0027),"},{"line_number":26,"context_line":"                    (\u0027neutron\u0027, \u0027get_network\u0027),"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_9ecee881","line":23,"updated":"2015-02-11 16:25:53.000000000","message":"I wonder how many of these are required to make the page useful.\n\nget_router for sure\n\nmaybe get_network and get_subnet as well\n\nCould the other calls fail and still allow the page to display enough information to be useful? Other calls would fail with error messages. That may be ok. Something to consider.","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"6f723067de67fb90766e6bba20c4e2b5ead08c23","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                    (\u0027neutron\u0027, \u0027get_network:router:external\u0027),"},{"line_number":29,"context_line":"                    (\u0027neutron\u0027, \u0027get_network:provider:segmentation_id\u0027),"},{"line_number":30,"context_line":"                    (\u0027neutron\u0027, \u0027get_subnet\u0027),"},{"line_number":31,"context_line":"                    (\u0027neutron\u0027, \u0027rule:get_subnet\u0027))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"horizon.register(Router)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_bedacc75","line":31,"updated":"2015-02-11 16:25:53.000000000","message":"why get_subnet and rule:get_subnet? the are attempting to point at the same thing, no?","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"5faa60a1352adfa71fa511248ede0b66fc660aad","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                    (\u0027neutron\u0027, \u0027get_network:router:external\u0027),"},{"line_number":29,"context_line":"                    (\u0027neutron\u0027, \u0027get_network:provider:segmentation_id\u0027),"},{"line_number":30,"context_line":"                    (\u0027neutron\u0027, \u0027get_subnet\u0027),"},{"line_number":31,"context_line":"                    (\u0027neutron\u0027, \u0027rule:get_subnet\u0027))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"horizon.register(Router)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_c0185b20","line":31,"in_reply_to":"da86d52c_bedacc75","updated":"2015-02-12 15:47:23.000000000","message":"Yep, it\u0027s a typo.","commit_id":"9a02e1638fd1d651889d494a915750091418a30b"}],"openstack_dashboard/policy.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"acd59209c0e897fdcad8c7fd0995fff52dd8555f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                policy_target[policy_attr] \u003d None"},{"line_number":180,"context_line":"        return policy_target"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def get_keystone_admin_role():"},{"line_number":184,"context_line":"    \"\"\"Get keystone admin role name\t184"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_16f8957b","line":182,"updated":"2014-09-30 11:33:27.000000000","message":"Do we need to define this method? Doesn\u0027t the following work?\n\n  keystone_admin_auth \u003d getattr(settings, \u0027OPENSTACK_KEYSTONE_ADMIN_PERMISSION\u0027, \u0027admin\u0027)\n\nIf it can, permission definitions in dashboards and panels would be simpler.\n\n  permissions \u003d (policy.keystone_admin_role,)","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"acd59209c0e897fdcad8c7fd0995fff52dd8555f","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def get_keystone_admin_role():"},{"line_number":184,"context_line":"    \"\"\"Get keystone admin role name\t184"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    Returns settings.OPENSTACK_KEYSTONE_ADMIN_PERMISSION value if it was set,"},{"line_number":187,"context_line":"    else returns default admin role name \u0027admin\u0027."}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_d6ab6d87","line":184,"updated":"2014-09-30 11:33:27.000000000","message":"\u003cTAB\u003e184 is unnecessary.","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"acd59209c0e897fdcad8c7fd0995fff52dd8555f","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    :return: string with keystone admin role name"},{"line_number":190,"context_line":"    \"\"\""},{"line_number":191,"context_line":"    return getattr(settings, \u0027OPENSTACK_KEYSTONE_ADMIN_PERMISSION\u0027, \u0027admin\u0027) or \u0027admin\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_569f7d5f","line":191,"updated":"2014-09-30 11:33:27.000000000","message":"\"or \u0027admin\u0027\" is unnecessary.\n\n  getattr(settings, \u0027OPENSTACK_KEYSTONE_ADMIN_PERMISSION\u0027, \u0027admin\u0027)\n\nI don\u0027t think we need to care a where the setting has a wrong value (i.e., an empty value).","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"}],"openstack_dashboard/settings.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"acd59209c0e897fdcad8c7fd0995fff52dd8555f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"USE_L10N \u003d True"},{"line_number":261,"context_line":"USE_TZ \u003d True"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \"admin\""},{"line_number":265,"context_line":"OPENSTACK_KEYSTONE_ADMIN_PERMISSION \u003d \u0027openstack.roles.\u0027 \\"},{"line_number":266,"context_line":"                                      + OPENSTACK_KEYSTONE_ADMIN_ROLE"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_36e4b90c","line":263,"updated":"2014-09-30 11:33:27.000000000","message":"Please add the description of the new setting to doc/source/topics/settings.rst.","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"acd59209c0e897fdcad8c7fd0995fff52dd8555f","unresolved":false,"context_lines":[{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \"admin\""},{"line_number":265,"context_line":"OPENSTACK_KEYSTONE_ADMIN_PERMISSION \u003d \u0027openstack.roles.\u0027 \\"},{"line_number":266,"context_line":"                                      + OPENSTACK_KEYSTONE_ADMIN_ROLE"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_5603fdb7","line":266,"updated":"2014-09-30 11:33:27.000000000","message":"Why do we need to define both variables here? Is there a case where both setting variables needs to be configurable separately? If no, I would suggest to define only either. My preference is OPENSTACK_KEYSTONE_ADMIN_ROLE because it matches keystone configuration and \"openstack.roles\" is a prefix defined by openstack-auth.","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6f378464a498591f2efcfc577221d065c73cf368","unresolved":false,"context_lines":[{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \"admin\""},{"line_number":265,"context_line":"OPENSTACK_KEYSTONE_ADMIN_PERMISSION \u003d \u0027openstack.roles.\u0027 \\"},{"line_number":266,"context_line":"                                      + OPENSTACK_KEYSTONE_ADMIN_ROLE"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_6851eb0d","line":266,"in_reply_to":"baa201ad_29f53e83","updated":"2014-10-01 07:18:04.000000000","message":"Considering your proposed change in dajngo-openstack-auth, \"OPENSTACK_KEYSTONE_ADMIN_ROLE\" is a required settings, so I don\u0027t think OPENSTACK_KEYSTONE_ADMIN_PERMISSION here.\n\n\"openstack.roles.XXX\" is defined in django-openstack-auth, so I think it is better that a value like OPENSTACK_KEYSTONE_ADMIN_PERMISSION is provided by django-openstack-auth. By doing this, horizon no longer takes care of the exact string \"openstack.roles.****\".\n\nAnd it seems better that openstack_dashboard/policy.py has:\n\n  keystone_admin_auth \u003d openstack_auth.utils.get_keystone_admin_permission()\n\nThought?","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"0cb12b3358eb0f0fcbf4169e47761ae17f66c5aa","unresolved":false,"context_lines":[{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \"admin\""},{"line_number":265,"context_line":"OPENSTACK_KEYSTONE_ADMIN_PERMISSION \u003d \u0027openstack.roles.\u0027 \\"},{"line_number":266,"context_line":"                                      + OPENSTACK_KEYSTONE_ADMIN_ROLE"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_29f53e83","line":266,"in_reply_to":"baa201ad_5603fdb7","updated":"2014-09-30 13:23:14.000000000","message":"I agree that it\u0027s a little bit dirty solution.\nWill there be appropriate from the point of horizon codestyle to define a constant in\nopenstack_dashboard/policy.py:\nkeystone_admin_auth\u003dgetattr(settings,\u0027OPENSTACK_KEYSTONE_ADMIN_PERMISSION\u0027, \u0027admin\u0027)\nAnd use in like this:\npermissions \u003d (policy.keystone_admin_role,)\n?","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"6725429209e762822d8293266c773088d0943fe7","unresolved":false,"context_lines":[{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \"admin\""},{"line_number":265,"context_line":"OPENSTACK_KEYSTONE_ADMIN_PERMISSION \u003d \u0027openstack.roles.\u0027 \\"},{"line_number":266,"context_line":"                                      + OPENSTACK_KEYSTONE_ADMIN_ROLE"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_dd960f94","line":266,"in_reply_to":"baa201ad_6851eb0d","updated":"2014-10-03 12:28:01.000000000","message":"In my opinion, your suggestion is quite reasonable.\nI have implemented this approach in the next patch set.","commit_id":"298b29e998e64f7cc1ac907bd2ce7b34d524344c"},{"author":{"_account_id":10765,"name":"Andre Aranha","email":"afaranha@lsd.ufcg.edu.br","username":"afaranha"},"change_message_id":"a1eb678926bf77c296640a706f9c22d50c30dd21","unresolved":false,"context_lines":[{"line_number":261,"context_line":"USE_TZ \u003d True"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \u0027admin\u0027"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_271f8c5c","line":264,"updated":"2014-10-16 19:12:02.000000000","message":"How can I add more roles here? Just using comma?\nOPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \u0027admin\u0027, \u0027cloud_admin\u0027\n?","commit_id":"5d0ab3116982d274e239c9d2de02b72616d5cf8c"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"1c541f3a53a4374c52c49ec678e5b04dd28f5811","unresolved":false,"context_lines":[{"line_number":261,"context_line":"USE_TZ \u003d True"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":264,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLE \u003d \u0027admin\u0027"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_ad9d13be","line":264,"in_reply_to":"baa201ad_271f8c5c","updated":"2014-10-17 08:24:31.000000000","message":"My fault, I\u0027ve forgot to refactor it to list. Now it is fixed.","commit_id":"5d0ab3116982d274e239c9d2de02b72616d5cf8c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"3626dc6d4e26ee5310fcccc2624025397efe3491","unresolved":false,"context_lines":[{"line_number":276,"context_line":"USE_TZ \u003d True"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":279,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLES \u003d [\u0027admin\u0027]"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_a7d896f1","line":279,"updated":"2014-11-26 18:16:12.000000000","message":"Why do we still need to configure admin roles here when we are already checking against policy rules?","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"95afc94d67fec0abec0376a49664da778b095f28","unresolved":false,"context_lines":[{"line_number":276,"context_line":"USE_TZ \u003d True"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"OPENSTACK_KEYSTONE_DEFAULT_ROLE \u003d \u0027_member_\u0027"},{"line_number":279,"context_line":"OPENSTACK_KEYSTONE_ADMIN_ROLES \u003d [\u0027admin\u0027]"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"DEFAULT_EXCEPTION_REPORTER_FILTER \u003d \u0027horizon.exceptions.HorizonReporterFilter\u0027"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a890539_09d6c6c3","line":279,"in_reply_to":"5a890539_a7d896f1","updated":"2014-11-27 13:12:07.000000000","message":"Because we use this const here: https://review.openstack.org/#/c/123745/13/openstack_auth/user.py","commit_id":"399ecf181785fcf17a8e74a97a285dfe751987cf"}]}
