From 8c8667f0763d6a01762220577d5a068cccf51bdb Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 11 Mar 2019 17:30:08 -0700 Subject: [PATCH] Add user permissions blog --- docs/auth_permissions.md | 179 ++++++++++++++++++ website/blog/2019-03-11-user-permissions.md | 55 ++++++ .../2019-03-user-permissions/screenshot.png | Bin 0 -> 42368 bytes 3 files changed, 234 insertions(+) create mode 100644 website/blog/2019-03-11-user-permissions.md create mode 100644 website/static/img/en/blog/2019-03-user-permissions/screenshot.png diff --git a/docs/auth_permissions.md b/docs/auth_permissions.md index 4b86a586..219565cc 100644 --- a/docs/auth_permissions.md +++ b/docs/auth_permissions.md @@ -92,3 +92,182 @@ Once merged becomes } } ``` + +## Checking permissions + +We currently have two different permission checks: can the user do the read/control/edit operation on an entity, and is the user an admin and thus allowed to change this configuration setting. + +Certain APIs will always be accessible to all users, but might offer a limited scope based on the permissions, like rendering a template. + +### Checking permissions + +To check a permission, you will need to have access to the user object. Once you have the user object, checking the permission is easy. + +```python +from homeassistant.exceptions import Unauthorized +from homeasistant.permissions.const import ( + POLICY_READ, POLICY_CONTROL, POLICY_EDIT +) + +# Raise error if user is not an admin +if not user.is_admin: + raise Unauthorized() + + +# Raise error if user does not have access to an enitty +if not user.permissions.check_entity(entity_id, POLICY_CONTROL): + raise Unauthorized() +``` + +### The context object + +All service calls, fired events and states in Home Assistant have a context object. This object allows us to attribute changes to events and services. These context objects also contain a user id, which is used for checking the permissions. + +It's crucial for permission checking that actions taken on behalf of the user are done with a context containing the user ID. If you are in a service handler, you should re-use the incoming context `call.context`. If you are inside a WebSocket API or Rest API endpoint, you should create a context with the correct user: + +```python +from homeassistant.core import Context + +await hass.services.async_call('homeassistant', 'stop', context=Context( + user_id=user.id +), blocking=True) +``` + +### If a permission check fails + +When you detect an anauthorized action, you should raise the `homeassistant.exceptions.Unauthorized` exception. This exception will cancel the current action and notifies the user that their action is unauthorized. + +The `Unauthorized` exception has various parameters, to identify the permission check that failed. All fields are optional. + +| # Not all actions have an ID (like adding config entry) +| # We then use this fallback to know what category was unauth + + +| Parameter | Description +| --------- | ----------- +| context | The context of the current call. +| user_id | The user ID that we tried to operate on. +| entity_id | The entity ID that we tried to operate on. +| config_entry_id | The config entry ID that we tried to operate on. +| perm_category | The permission category that we tested. Only necessary if we don't have an object ID that the user tried to operate on (like when we create a config entry). +| permission | The permission that we tested, ie `POLICY_READ`. + +### Securing a service call handler + +Service calls allow a user to control entities or with the integration as a whole. A service call uses the attached context to see which user invoked the command. Because context is used, it is important that you also pass the call context to all service calls. + +All services that are registered via the entity component (`component.async_register_entity_service()`) will automatically have their permissions checked. + +#### Checking entity permissions + +Your service call handler will need to check the permissions for each entity that it will act on. + +```python +from homeassistant.exceptions import Unauthorized, UnknownUser +from homeassistant.auth.permissions.const import POLICY_CONTROL + +async def handle_entity_service(call): + """Handle a service call.""" + entity_ids = call.data['entity_id'] + + for entity_id in entity_ids: + if call.context.user_id: + user = await hass.auth.async_get_user(call.context.user_id) + + if user is None: + raise UnknownUser( + context=call.context, + entity_id=entity_id, + policy=POLICY_CONTROL, + ) + + if not user.permissions.check_entity(entity_id, POLICY_CONTROL): + raise Unauthorized( + context=call.context, + entity_id=entity_id, + policy=POLICY_CONTROL, + ) + + # Do action on entity + + +async def async_setup(hass, config): + hass.services.async_register(DOMAIN, 'my_service', handle_entity_service) + return True +``` + +#### Checking admin permission + +Starting Home Assistant 0.90, there is a special decorator to help protect +services that require admin access. + +```python +from homeassistant.exceptions import Unauthorized, UnknownUser +from homeassistant.helpers import service + +# New in Home Assistant 0.90 +@service.require_admin +async def handle_admin_service(call): + """Handle a service call.""" + # Do admin action + + +async def async_setup(hass, config): + hass.services.async_register(DOMAIN, 'my_service', + handle_admin_service(hass)) + return True +``` + +### Securing a REST API endpoint + +```python +from homeassistant.core import Context +from homeassistant.components.http.view import HomeAssistantView +from homeassistant.exceptions import Unauthorized + + +class MyView(HomeAssistantView): + """View to handle Status requests.""" + + url = '/api/my-component/my-api' + name = 'api:my-component:my-api' + + async def post(self, request): + """Notify that the API is running.""" + hass = request.app['hass'] + user = request['hass_user'] + + if not user.is_admin: + raise Unauthorized() + + hass.bus.async_fire('my-component-api-running', context=Context( + user_id=user.id + )) + + return self.json_message("Done.") +``` + +### Securing a Websocket API endpoint + +Verifying permissions in a Websocket API endpoint can be done by accessing the +user via `connection.user`. If you need to check admin access, you can use the +built-in `@require_admin` decorator. + +```python +from homeassistant.compnents import websocket_api + + +async def async_setup(hass, config): + hass.components.websocket_api.async_register_command(websocket_create) + return True + + +@websocket_api.require_admin +@websocket_api.async_response +@websocket_api.websocket_command({ + vol.Required('type'): 'my-component/my-action', +}) +async def websocket_create(hass, connection, msg): + """Create a user.""" + # Do action +``` diff --git a/website/blog/2019-03-11-user-permissions.md b/website/blog/2019-03-11-user-permissions.md new file mode 100644 index 00000000..d6a6d6be --- /dev/null +++ b/website/blog/2019-03-11-user-permissions.md @@ -0,0 +1,55 @@ +--- +author: Paulus Schoutsen +authorURL: https://twitter.com/balloob +authorFBID: 297400035 +title: Can I Have User Permissions? +--- + +Home Assistant has had a user permission system since Home Assistant 0.82 (released Nov, 2018). Permissions are attached to groups, a user can be part of multiple groups, user permissions are based on merging the permission policies of all of its groups. More detailed info can be found in [our docs](auth_permissions.md). Users can create their own groups, but there are also three system groups: "admin", "users" (new in 0.90), and "read-only". All three have access to all entities, but the read-only cannot control any of them. Only the users part of the admin group can access administrative options like managing users and integrations. + +Before Home Assistant 0.90, we were not using any of it. Instead, all users are part of the admin group, as that group provides the same access as before we had permissions. With 0.90, we're going to allow switching the users group between the system groups "admin" and "users". When a user is part of the "users" group, they will not be able to administer Home Assistant. The UI will hide the menu items to open the configuration panel or the developer tools. + +![Screenshot showing a user in the users group](/img/en/blog/2019-03-user-permissions/screenshot.png) + +This feature is however unfinished. We need to audit the Home Assistant code to make sure that all APIs and service calls check the users permissions. So although a user will not be able to use the UI to make changes, there might still be APIs that can be accessed without permissions. And not only do we need to check the Home Assistant code, custom components that register services or APIs will also have to be updated. + +So this is where you can help! If you're maintaining an integration, either custom or built-in, read up on [the documentation on how to check permissions](/docs/en/next/auth_permissions.html##checking-permissions). Then check that your integration checks permissions appropriately. Once you checked yours, help others check theirs, and help us to audit all services and API calls in Home Assistant. + +## What about custom groups? + +Although we support the creation of custom groups, don't expect it publicly exposed anytime soon. The reason for this is that it requires a lot of work on APIs that interact with the custom policies. The hardest part is that a custom policy could enable read access to only a couple of entities, and only allow control access to a subset of them. We will need to go through each API to make sure they support this. Lovelace will also need to be updated to support users having their own configuration view. + +That being said, if you do want to play with it, it's possible. + +> This is risky. Make backups, etc. + +Turn off Home Assistant and open up `/.storage/auth`. Find the key `"groups"` and add a new group: + +```json +{ + "id": "my-custom-group", + "name": "My Custom Group", + "policy": { + "entities": { + "entity_ids": { + "light.kitchen": true, + "swtich.ac": { + "read": true + } + } + } + } +} +``` + +Now scroll down in the file to the `"users"` key and find the user you want to apply the custom group to. For this user, update their `"group_ids"` value to be that of your custom group. Note, you should not update the user that has `"owner": true`, as they will always have all permissions. + +```json +"group_ids": [ + "my-custom-group" +], +``` + +Now start Home Assistant and log in with the updated user. If all went well, you should see only the kitchen lights and AC switch. Controlling the AC will fail. + +A user can be as many groups as you want. Only members of the `system-admin` group can administer the system. To learn more about the policy format, check the [documentation](/docs/en/next/auth_permissions.html). diff --git a/website/static/img/en/blog/2019-03-user-permissions/screenshot.png b/website/static/img/en/blog/2019-03-user-permissions/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b11f1fff010364f92f3baf62da4102e40f250d05 GIT binary patch literal 42368 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 U=K_;Gg}6