)]}'
{"doc/config-reference/source/message.rst":[{"author":{"_account_id":19779,"name":"Chason Chan","display_name":"chenxing","email":"chason.chan@foxmail.com","username":"chenxing"},"change_message_id":"c620e77714aec031b46f990a28a5d02e060484d6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"  Resides in the ``/etc/zaqar`` directory. If there is a file ``zaqar.conf``"},{"line_number":78,"context_line":"  in ``~/.zaqar`` directory, it is used instead of the one in ``/etc/zaqar``"},{"line_number":79,"context_line":"  directory."},{"line_number":80,"context_line":"* ``policy.json``. Contains RBAC policy for all actions. Only applies to API"},{"line_number":81,"context_line":"  v2. Resides in the ``/etc/zaqar`` directory. If there is a file"},{"line_number":82,"context_line":"  ``policy.json`` in ``~/.zaqar`` directory, it is used instead of the one in"},{"line_number":83,"context_line":"  ``/etc/zaqar`` directory. See :doc:`../policy-yaml-file`."}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa31d9ce_2e80018b","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":15},"updated":"2017-02-14 07:13:56.000000000","message":"policy.yaml","commit_id":"4bf614c3158d102835eda87a07931fc3750af11b"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4388442e9a052e8841042780eddea220a7fc2e77","unresolved":false,"context_lines":[{"line_number":77,"context_line":"  Resides in the ``/etc/zaqar`` directory. If there is a file ``zaqar.conf``"},{"line_number":78,"context_line":"  in ``~/.zaqar`` directory, it is used instead of the one in ``/etc/zaqar``"},{"line_number":79,"context_line":"  directory."},{"line_number":80,"context_line":"* ``policy.json``. Contains RBAC policy for all actions. Only applies to API"},{"line_number":81,"context_line":"  v2. Resides in the ``/etc/zaqar`` directory. If there is a file"},{"line_number":82,"context_line":"  ``policy.json`` in ``~/.zaqar`` directory, it is used instead of the one in"},{"line_number":83,"context_line":"  ``/etc/zaqar`` directory. See :doc:`../policy-yaml-file`."}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa31d9ce_5c840f5d","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":15},"in_reply_to":"fa31d9ce_2e80018b","updated":"2017-02-14 07:51:36.000000000","message":"Done","commit_id":"4bf614c3158d102835eda87a07931fc3750af11b"},{"author":{"_account_id":19779,"name":"Chason Chan","display_name":"chenxing","email":"chason.chan@foxmail.com","username":"chenxing"},"change_message_id":"c620e77714aec031b46f990a28a5d02e060484d6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  directory."},{"line_number":80,"context_line":"* ``policy.json``. Contains RBAC policy for all actions. Only applies to API"},{"line_number":81,"context_line":"  v2. Resides in the ``/etc/zaqar`` directory. If there is a file"},{"line_number":82,"context_line":"  ``policy.json`` in ``~/.zaqar`` directory, it is used instead of the one in"},{"line_number":83,"context_line":"  ``/etc/zaqar`` directory. See :doc:`../policy-yaml-file`."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa31d9ce_ae423166","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":15},"updated":"2017-02-14 07:13:56.000000000","message":"policy.yaml","commit_id":"4bf614c3158d102835eda87a07931fc3750af11b"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4388442e9a052e8841042780eddea220a7fc2e77","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  directory."},{"line_number":80,"context_line":"* ``policy.json``. Contains RBAC policy for all actions. Only applies to API"},{"line_number":81,"context_line":"  v2. Resides in the ``/etc/zaqar`` directory. If there is a file"},{"line_number":82,"context_line":"  ``policy.json`` in ``~/.zaqar`` directory, it is used instead of the one in"},{"line_number":83,"context_line":"  ``/etc/zaqar`` directory. See :doc:`../policy-yaml-file`."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"fa31d9ce_3cb59b30","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":15},"in_reply_to":"fa31d9ce_ae423166","updated":"2017-02-14 07:51:36.000000000","message":"Done","commit_id":"4bf614c3158d102835eda87a07931fc3750af11b"}],"doc/config-reference/source/policy-yaml-file.rst":[{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"The policy target, also named \"action\", represents an API call like"},{"line_number":21,"context_line":"\"start an instance\" or \"attach a volume\"."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_9b02460a","line":23,"range":{"start_line":23,"start_character":35,"end_line":23,"end_character":44},"updated":"2017-02-13 08:46:25.000000000","message":"For example,","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"The policy target, also named \"action\", represents an API call like"},{"line_number":21,"context_line":"\"start an instance\" or \"attach a volume\"."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_d602d308","line":23,"range":{"start_line":23,"start_character":45,"end_line":23,"end_character":62},"updated":"2017-02-13 08:46:25.000000000","message":"the Compute service","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":20,"context_line":"The policy target, also named \"action\", represents an API call like"},{"line_number":21,"context_line":"\"start an instance\" or \"attach a volume\"."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_77611e39","line":23,"range":{"start_line":23,"start_character":45,"end_line":23,"end_character":62},"in_reply_to":"fa31d9ce_d602d308","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"start an instance\" or \"attach a volume\"."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"},{"line_number":27,"context_line":"respectively."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_761e8764","line":24,"range":{"start_line":24,"start_character":28,"end_line":24,"end_character":49},"updated":"2017-02-13 08:46:25.000000000","message":"volumes, and networks (comma before `and` is missing)","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\"start an instance\" or \"attach a volume\"."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"},{"line_number":27,"context_line":"respectively."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_5767934c","line":24,"range":{"start_line":24,"start_character":28,"end_line":24,"end_character":49},"in_reply_to":"fa31d9ce_761e8764","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"},{"line_number":27,"context_line":"respectively."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The mapping between API calls and actions is not generally documented."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_b6263fb8","line":26,"range":{"start_line":26,"start_character":39,"end_line":26,"end_character":44},"updated":"2017-02-13 08:46:25.000000000","message":", and","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Action names are usually qualified. Example: OpenStack Compute features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"},{"line_number":27,"context_line":"respectively."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The mapping between API calls and actions is not generally documented."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_975d8b7b","line":26,"range":{"start_line":26,"start_character":39,"end_line":26,"end_character":44},"in_reply_to":"fa31d9ce_b6263fb8","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"The exclamation mark stands for \"never\" or \"nobody\", which effectively"},{"line_number":64,"context_line":"disables the Compute API \"shelve an instance\"."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Many APIs can only be called by admin users. This can be expressed by"},{"line_number":67,"context_line":"the rule ``\"role:admin\"``. The following policy ensures that only"},{"line_number":68,"context_line":"administrators can create new users in the Identity database:"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_16ce2bb4","line":66,"range":{"start_line":66,"start_character":32,"end_line":66,"end_character":43},"updated":"2017-02-13 08:46:25.000000000","message":"administrators","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":63,"context_line":"The exclamation mark stands for \"never\" or \"nobody\", which effectively"},{"line_number":64,"context_line":"disables the Compute API \"shelve an instance\"."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Many APIs can only be called by admin users. This can be expressed by"},{"line_number":67,"context_line":"the rule ``\"role:admin\"``. The following policy ensures that only"},{"line_number":68,"context_line":"administrators can create new users in the Identity database:"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_17d8e2ee","line":66,"range":{"start_line":66,"start_character":32,"end_line":66,"end_character":43},"in_reply_to":"fa31d9ce_16ce2bb4","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    \"identity:create_user\" : \"role:admin\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"You can limit APIs to any role. For example, the Orchestration service"},{"line_number":75,"context_line":"defines a role named ``heat_stack_user``. Whoever has this role isn\u0027t"},{"line_number":76,"context_line":"allowed to create stacks:"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":".. code-block:: none"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_56c0a37c","line":75,"range":{"start_line":75,"start_character":64,"end_line":75,"end_character":69},"updated":"2017-02-13 08:46:25.000000000","message":"is not (do not use contractions, please)","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    \"identity:create_user\" : \"role:admin\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"You can limit APIs to any role. For example, the Orchestration service"},{"line_number":75,"context_line":"defines a role named ``heat_stack_user``. Whoever has this role isn\u0027t"},{"line_number":76,"context_line":"allowed to create stacks:"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":".. code-block:: none"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_37fec637","line":75,"range":{"start_line":75,"start_character":64,"end_line":75,"end_character":69},"in_reply_to":"fa31d9ce_56c0a37c","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    \"stacks:create\": \"not role:heat_stack_user\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"This rule makes use of the boolean operator ``not``. More complex rules"},{"line_number":83,"context_line":"can be built using operators ``and``, ``or`` and parentheses."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"You can define aliases for rules:"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_b6371faf","line":83,"range":{"start_line":83,"start_character":45,"end_line":83,"end_character":48},"updated":"2017-02-13 08:46:25.000000000","message":", and","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    \"stacks:create\": \"not role:heat_stack_user\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"This rule makes use of the boolean operator ``not``. More complex rules"},{"line_number":83,"context_line":"can be built using operators ``and``, ``or`` and parentheses."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"You can define aliases for rules:"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_77cf3729","line":83,"range":{"start_line":83,"start_character":45,"end_line":83,"end_character":48},"in_reply_to":"fa31d9ce_b6371faf","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"states that only the owner of an instance can start it up. The"},{"line_number":108,"context_line":"``project_id`` string before the colon is an API attribute, namely the project"},{"line_number":109,"context_line":"ID of the API user. It is compared with the project ID of the object (in"},{"line_number":110,"context_line":"this case, an instance); more precisely, it is compared with the"},{"line_number":111,"context_line":"``project_id`` field of that object in the database. If the two values are"},{"line_number":112,"context_line":"equal, permission is granted."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_165c6bec","line":110,"range":{"start_line":110,"start_character":23,"end_line":110,"end_character":24},"updated":"2017-02-13 08:46:25.000000000","message":"Replace ; with .","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":107,"context_line":"states that only the owner of an instance can start it up. The"},{"line_number":108,"context_line":"``project_id`` string before the colon is an API attribute, namely the project"},{"line_number":109,"context_line":"ID of the API user. It is compared with the project ID of the object (in"},{"line_number":110,"context_line":"this case, an instance); more precisely, it is compared with the"},{"line_number":111,"context_line":"``project_id`` field of that object in the database. If the two values are"},{"line_number":112,"context_line":"equal, permission is granted."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_d7a3aa4d","line":110,"range":{"start_line":110,"start_character":23,"end_line":110,"end_character":24},"in_reply_to":"fa31d9ce_165c6bec","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"``project_id`` field of that object in the database. If the two values are"},{"line_number":112,"context_line":"equal, permission is granted."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"An admin user always has permission to call APIs. This is how"},{"line_number":115,"context_line":"``/etc/keystone/policy.yaml`` makes this policy explicit:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":".. code-block:: none"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_d60813dc","line":114,"range":{"start_line":114,"start_character":3,"end_line":114,"end_character":8},"updated":"2017-02-13 08:46:25.000000000","message":"Administrator","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":111,"context_line":"``project_id`` field of that object in the database. If the two values are"},{"line_number":112,"context_line":"equal, permission is granted."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"An admin user always has permission to call APIs. This is how"},{"line_number":115,"context_line":"``/etc/keystone/policy.yaml`` makes this policy explicit:"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":".. code-block:: none"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_37ac0634","line":114,"range":{"start_line":114,"start_character":3,"end_line":114,"end_character":8},"in_reply_to":"fa31d9ce_d60813dc","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":151,"context_line":"compares the API user with the user ID of the credential object"},{"line_number":152,"context_line":"associated with the target."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Syntax"},{"line_number":155,"context_line":"~~~~~~"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A ``policy.yaml`` file consists of policies and aliases of the form"},{"line_number":158,"context_line":"``target:rule`` or ``alias:definition``, separated by commas and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_56e34305","line":155,"range":{"start_line":154,"start_character":0,"end_line":155,"end_character":6},"updated":"2017-02-13 08:46:25.000000000","message":"I would rather you put the Syntax subsection befor the examples.","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":151,"context_line":"compares the API user with the user ID of the credential object"},{"line_number":152,"context_line":"associated with the target."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Syntax"},{"line_number":155,"context_line":"~~~~~~"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"A ``policy.yaml`` file consists of policies and aliases of the form"},{"line_number":158,"context_line":"``target:rule`` or ``alias:definition``, separated by commas and"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_0215fe3e","line":155,"range":{"start_line":154,"start_character":0,"end_line":155,"end_character":6},"in_reply_to":"fa31d9ce_56e34305","updated":"2017-02-13 10:56:46.000000000","message":"The whole document structure is copied from old policy-json-file.rst, I think the consistent make it easier for readers to understand.","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Rules determine whether the API call is allowed."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Rules can be:"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"-  always true. The action is always permitted. This can be written as"},{"line_number":178,"context_line":"   ``\"\"`` (empty string), ``[]``, or ``\"@\"``."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_b6a1dfab","line":175,"range":{"start_line":175,"start_character":0,"end_line":175,"end_character":13},"updated":"2017-02-13 08:46:25.000000000","message":"Please start each bullet with the capital letter.","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Rules determine whether the API call is allowed."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Rules can be:"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"-  always true. The action is always permitted. This can be written as"},{"line_number":178,"context_line":"   ``\"\"`` (empty string), ``[]``, or ``\"@\"``."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_d7daa3e7","line":175,"range":{"start_line":175,"start_character":0,"end_line":175,"end_character":13},"in_reply_to":"fa31d9ce_b6a1dfab","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"-  boolean expressions based on simpler rules"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"Special checks are"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"-  ``\u003crole\u003e:\u003crole name\u003e``, a test whether the API credentials contain"},{"line_number":191,"context_line":"   this role."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_f6ab5787","line":188,"updated":"2017-02-13 08:46:25.000000000","message":":","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"-  boolean expressions based on simpler rules"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"Special checks are"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"-  ``\u003crole\u003e:\u003crole name\u003e``, a test whether the API credentials contain"},{"line_number":191,"context_line":"   this role."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_57f5d354","line":188,"in_reply_to":"fa31d9ce_f6ab5787","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"Two values are compared in the following way:"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":".. code-block:: none"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    \"value1 : value2\""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_d68bb31c","line":202,"range":{"start_line":202,"start_character":16,"end_line":202,"end_character":20},"updated":"2017-02-13 08:46:25.000000000","message":"yaml","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"Two values are compared in the following way:"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":".. code-block:: none"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    \"value1 : value2\""},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_d77623d6","line":202,"range":{"start_line":202,"start_character":16,"end_line":202,"end_character":20},"in_reply_to":"fa31d9ce_d68bb31c","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    \"value1 : value2\""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Possible values are"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"-  constants: Strings, numbers, ``true``, ``false``"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_16862b13","line":206,"range":{"start_line":206,"start_character":0,"end_line":206,"end_character":19},"updated":"2017-02-13 08:46:25.000000000","message":"Capital letters here as well","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"deca8e23598060660c7d03b982e00e286e0838b4","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    \"value1 : value2\""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Possible values are"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"-  constants: Strings, numbers, ``true``, ``false``"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_f7fa4742","line":206,"range":{"start_line":206,"start_character":0,"end_line":206,"end_character":19},"in_reply_to":"fa31d9ce_16862b13","updated":"2017-02-14 01:41:42.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":219,"context_line":"database. For example in the case of the ``\"compute:start\"`` API, the"},{"line_number":220,"context_line":"object is the instance to be started. The policy for starting instances"},{"line_number":221,"context_line":"could use the ``%(project_id)s`` attribute, that is the project that"},{"line_number":222,"context_line":"owns the instance. The trailing s indicates this is a string."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"``is_admin`` indicates that administrative privileges are granted via"},{"line_number":225,"context_line":"the admin token mechanism (the ``--os-token`` option of the ``keystone``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_36a40fa5","line":222,"range":{"start_line":222,"start_character":32,"end_line":222,"end_character":33},"updated":"2017-02-13 08:46:25.000000000","message":"``s``","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":219,"context_line":"database. For example in the case of the ``\"compute:start\"`` API, the"},{"line_number":220,"context_line":"object is the instance to be started. The policy for starting instances"},{"line_number":221,"context_line":"could use the ``%(project_id)s`` attribute, that is the project that"},{"line_number":222,"context_line":"owns the instance. The trailing s indicates this is a string."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"``is_admin`` indicates that administrative privileges are granted via"},{"line_number":225,"context_line":"the admin token mechanism (the ``--os-token`` option of the ``keystone``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_02989ebf","line":222,"range":{"start_line":222,"start_character":32,"end_line":222,"end_character":33},"in_reply_to":"fa31d9ce_36a40fa5","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"``is_admin`` indicates that administrative privileges are granted via"},{"line_number":225,"context_line":"the admin token mechanism (the ``--os-token`` option of the ``keystone``"},{"line_number":226,"context_line":"command). The admin token allows initialisation of the identity database"},{"line_number":227,"context_line":"before the admin role exists."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"The alias construct exists for convenience. An alias is short name for a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_b6b63fda","line":226,"range":{"start_line":226,"start_character":55,"end_line":226,"end_character":63},"updated":"2017-02-13 08:46:25.000000000","message":"Identity","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"``is_admin`` indicates that administrative privileges are granted via"},{"line_number":225,"context_line":"the admin token mechanism (the ``--os-token`` option of the ``keystone``"},{"line_number":226,"context_line":"command). The admin token allows initialisation of the identity database"},{"line_number":227,"context_line":"before the admin role exists."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"The alias construct exists for convenience. An alias is short name for a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_2293e2a4","line":226,"range":{"start_line":226,"start_character":55,"end_line":226,"end_character":63},"in_reply_to":"fa31d9ce_b6b63fda","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":14643,"name":"Olga Gusarenko","email":"ogusarenko@mirantis.com","username":"Olga"},"change_message_id":"59966326ca5abbcedd754bae86879ed2d078e00d","unresolved":false,"context_lines":[{"line_number":241,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"While the old json format policy file is still supported, we recommend using"},{"line_number":244,"context_line":"the newer yaml format file, more intuitive syntax."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_7677673a","line":244,"range":{"start_line":244,"start_character":10,"end_line":244,"end_character":14},"updated":"2017-02-13 08:46:25.000000000","message":"YAML","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"0768866aecc5a8ff1c72d9b6d2ad9ca67c70f7de","unresolved":false,"context_lines":[{"line_number":241,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"While the old json format policy file is still supported, we recommend using"},{"line_number":244,"context_line":"the newer yaml format file, more intuitive syntax."}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa31d9ce_02dfbe69","line":244,"range":{"start_line":244,"start_character":10,"end_line":244,"end_character":14},"in_reply_to":"fa31d9ce_7677673a","updated":"2017-02-13 10:56:46.000000000","message":"Done","commit_id":"d80c86597248336a33a1fde441f1df9530cdb199"},{"author":{"_account_id":23205,"name":"ianeta hutchinson","email":"ianeta.hutchinson@intel.com","username":"iphutch"},"change_message_id":"666736a6f26eeabf1eb4f24e79e63ae824324763","unresolved":false,"context_lines":[{"line_number":2,"context_line":"The policy.yaml file"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Each OpenStack service, Identity, Compute, Networking and so on, has its"},{"line_number":6,"context_line":"own role-based access policies. They determine which user can access"},{"line_number":7,"context_line":"which objects in which way, and are defined in the service\u0027s"},{"line_number":8,"context_line":"``policy.yaml`` file."}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_511c1477","line":5,"range":{"start_line":5,"start_character":53,"end_line":5,"end_character":57},"updated":"2017-02-13 16:55:57.000000000","message":", and","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"218df9136a49843fda3625a2362be4243e30d58c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"The policy.yaml file"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Each OpenStack service, Identity, Compute, Networking and so on, has its"},{"line_number":6,"context_line":"own role-based access policies. They determine which user can access"},{"line_number":7,"context_line":"which objects in which way, and are defined in the service\u0027s"},{"line_number":8,"context_line":"``policy.yaml`` file."}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_570b138e","line":5,"range":{"start_line":5,"start_character":53,"end_line":5,"end_character":57},"in_reply_to":"fa31d9ce_511c1477","updated":"2017-02-14 01:36:31.000000000","message":"Done","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":23205,"name":"ianeta hutchinson","email":"ianeta.hutchinson@intel.com","username":"iphutch"},"change_message_id":"666736a6f26eeabf1eb4f24e79e63ae824324763","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Action names are usually qualified. For example, the Compute service features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"},{"line_number":27,"context_line":"respectively."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The mapping between API calls and actions is not generally documented."}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_5199741e","line":26,"range":{"start_line":26,"start_character":39,"end_line":26,"end_character":44},"updated":"2017-02-13 16:55:57.000000000","message":", and","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"218df9136a49843fda3625a2362be4243e30d58c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Action names are usually qualified. For example, the Compute service features"},{"line_number":24,"context_line":"API calls to list instances, volumes and networks. In"},{"line_number":25,"context_line":"``/etc/nova/policy.yaml``, these APIs are represented by"},{"line_number":26,"context_line":"``compute:get_all``, ``volume:get_all`` and ``network:get_all``,"},{"line_number":27,"context_line":"respectively."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The mapping between API calls and actions is not generally documented."}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_b7fa8f73","line":26,"range":{"start_line":26,"start_character":39,"end_line":26,"end_character":44},"in_reply_to":"fa31d9ce_5199741e","updated":"2017-02-14 01:36:31.000000000","message":"Done","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":23205,"name":"ianeta hutchinson","email":"ianeta.hutchinson@intel.com","username":"iphutch"},"change_message_id":"666736a6f26eeabf1eb4f24e79e63ae824324763","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    \"stacks:create\": \"not role:heat_stack_user\""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"This rule makes use of the boolean operator ``not``. More complex rules"},{"line_number":83,"context_line":"can be built using operators ``and``, ``or`` and parentheses."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"You can define aliases for rules:"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_51c094e0","line":83,"range":{"start_line":83,"start_character":44,"end_line":83,"end_character":48},"updated":"2017-02-13 16:55:57.000000000","message":", and","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":23205,"name":"ianeta hutchinson","email":"ianeta.hutchinson@intel.com","username":"iphutch"},"change_message_id":"666736a6f26eeabf1eb4f24e79e63ae824324763","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    \"value1 : value2\""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Possible values are:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"-  constants: Strings, numbers, ``true``, ``false``"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_c378372e","line":206,"range":{"start_line":206,"start_character":0,"end_line":206,"end_character":20},"updated":"2017-02-13 16:55:57.000000000","message":"Capitalize first letter of bullet points.","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"218df9136a49843fda3625a2362be4243e30d58c","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    \"value1 : value2\""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Possible values are:"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"-  constants: Strings, numbers, ``true``, ``false``"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa31d9ce_f71ec7b9","line":206,"range":{"start_line":206,"start_character":0,"end_line":206,"end_character":20},"in_reply_to":"fa31d9ce_c378372e","updated":"2017-02-14 01:36:31.000000000","message":"Done","commit_id":"92914a38fa4eb70c78febb4c7774eacf707d5f77"},{"author":{"_account_id":9162,"name":"Lana Brindley","email":"openstack@lanabrindley.com","username":"loquacity"},"change_message_id":"7f13eb7d522fcd3aa874d9dda17565dfc19c81a7","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Rules determine whether the API call is allowed."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Rules Can Be:"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"-  always true. The action is always permitted. This can be written as"},{"line_number":178,"context_line":"   ``\"\"`` (empty string), ``[]``, or ``\"@\"``."}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa31d9ce_668063c1","line":175,"range":{"start_line":175,"start_character":6,"end_line":175,"end_character":12},"updated":"2017-02-14 04:46:33.000000000","message":"Remove initcaps here, and 188 \u0026 206. (\"Rules can be:\")","commit_id":"954e513d1477bd594f758cc894541192d6d8c02f"},{"author":{"_account_id":9162,"name":"Lana Brindley","email":"openstack@lanabrindley.com","username":"loquacity"},"change_message_id":"7f13eb7d522fcd3aa874d9dda17565dfc19c81a7","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"Rules Can Be:"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"-  always true. The action is always permitted. This can be written as"},{"line_number":178,"context_line":"   ``\"\"`` (empty string), ``[]``, or ``\"@\"``."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"-  always false. The action is never permitted. Written as ``\"!\"``."}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa31d9ce_261cabc0","line":177,"range":{"start_line":177,"start_character":3,"end_line":177,"end_character":4},"updated":"2017-02-14 04:46:33.000000000","message":"Capitalise the first letter of each bullet","commit_id":"954e513d1477bd594f758cc894541192d6d8c02f"}]}
