You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
matrix-spec/data/event-schemas/schema/m.room.power_levels.yaml

114 lines
4.7 KiB
YAML

---
allOf:
- $ref: core-event-schema/state_event.yaml
description: |-
This event specifies the minimum level a user must have in order to perform a
certain action. It also specifies the levels of each user in the room.
If a `user_id` is in the `users` list, then that `user_id` has the
associated power level. Otherwise they have the default level
`users_default`. If `users_default` is not supplied, it is assumed to be
0. If the room contains no `m.room.power_levels` event, the room's creator has
a power level of 100, and all other users have a power level of 0.
The level required to send a certain event is governed by `events`,
`state_default` and `events_default`. If an event type is specified in
`events`, then the user must have at least the level specified in order to
send that event. If the event type is not supplied, it defaults to
`events_default` for Message Events and `state_default` for State
Events.
If there is no `state_default` in the `m.room.power_levels` event, the
`state_default` is 50. If there is no `events_default` in the
`m.room.power_levels` event, the `events_default` is 0. If the room
contains no `m.room.power_levels` event, *both* the `state_default` and
`events_default` are 0.
The power level required to invite a user to the room, kick a user from the
room, ban a user from the room, or redact an event sent by another user, is
defined by `invite`, `kick`, `ban`, and `redact`, respectively. The levels
for `kick`, `ban` and `redact` default to 50 if they are not specified in the
`m.room.power_levels` event, or if the room contains no `m.room.power_levels`
event. `invite` defaults to 0 in either case.
**Note:**
As noted above, in the absence of an `m.room.power_levels` event, the
`state_default` is 0, and all users are considered to have power level 0.
That means that **any** member of the room can send an
`m.room.power_levels` event, changing the permissions in the room.
Server implementations should therefore ensure that each room has an
`m.room.power_levels` event as soon as it is created. See also the
documentation of the `/createRoom` API.
The allowed range for power level values is `[-(2**53)+1, (2**53)-1]`,
as required by the [Canonical JSON specification](/appendices/#canonical-json).
properties:
content:
properties:
ban:
description: The level required to ban a user. Defaults to 50 if unspecified.
type: integer
events:
additionalProperties:
type: integer
description: The level required to send specific event types. This is a mapping from event type to power level required.
title: Event power levels
type: object
events_default:
description: |-
The default level required to send message events. Can be
overridden by the `events` key. Defaults to 0 if unspecified.
type: integer
invite:
description: The level required to invite a user. Defaults to 0 if unspecified.
type: integer
kick:
description: The level required to kick a user. Defaults to 50 if unspecified.
type: integer
redact:
description: The level required to redact an event sent by another user. Defaults to 50 if unspecified.
type: integer
state_default:
description: |-
The default level required to send state events. Can be overridden
by the `events` key. Defaults to 50 if unspecified.
type: integer
users:
additionalProperties:
type: integer
description: The power levels for specific users. This is a mapping from `user_id` to power level for that user.
title: User power levels
type: object
users_default:
description: |-
The default power level for every user in the room, unless their
`user_id` is mentioned in the `users` key. Defaults to 0 if
unspecified.
type: integer
notifications:
properties:
room:
type: integer
description: The level required to trigger an `@room` notification. Defaults to 50 if unspecified.
additionalProperties:
type: integer
description: |-
The power level requirements for specific notification types.
This is a mapping from `key` to power level for that notifications key.
title: Notifications
type: object
type: object
state_key:
description: A zero-length string.
pattern: '^$'
type: string
type:
enum:
- m.room.power_levels
type: string
title: Defines the power levels (privileges) of users in the room.
type: object