고급 권한: 백엔드 인프라#
이 문서는 Mattermost의 권한에 대한 백엔드 서버 인프라를 설명하며, 설치를 수정하려는 기술 관리자나 개발자에게만 권장됩니다.
엔티티 정의#
권한#
권한 은 객체에 대해 수행될 수 있는 허용된 작업을 설명합니다. 이는 사용자가 권한을 부여하는 역할이 할당된 컨텍스트에서 수행할 수 있는 작업을 설명합니다.
역할#
역할 은 권한이 부여되는 것으로, 해당 컨텍스트에서 할당된 권한을 부여하기 위해 컨텍스트에서 사용자에게 할당됩니다. 한 사용자는 서로 다른 컨텍스트에서 서로 다른 역할에 의해 부여된 다양한 권한 세트를 가질 수 있습니다.
범위#
권한은 주어진 범위 내에 존재합니다. Mattermost 시스템에는 세 가지 범위가 있습니다: 시스템, 팀 및 채널. 권한은 적용된 컨텍스트에서 범위를 따라 계단식으로 내려갑니다. 예를 들어, “채널” 범위의 권한이 “팀” 컨텍스트에 적용되면, 해당 권한은 해당 팀 내의 모든 채널에 적용됩니다. 권한은 다음과 같이 간주됩니다:
시스템 수준에서만 의미가 있는 경우 시스템 범위 입니다. 예:
manage_oauth.팀 수준과 시스템 수준에서 의미가 있는 경우 팀 범위 입니다. 예:
create_public_channel.채널, 팀 및 시스템 수준에서 의미가 있는 경우 채널 범위 입니다. 예:
manage_public_channel_properties.
컨텍스트#
컨텍스트 는 범위의 인스턴스입니다. 예를 들어, “Developers Hangout”이라는 채널은 채널 범위의 인스턴스입니다. 컨텍스트는 범위의 계층적 순서를 반영하는 계층적 관계를 가집니다. 각 컨텍스트는 하나의 부모를 가지며, 여러 자식을 가질 수 있으며, 최종 부모 컨텍스트는 시스템 컨텍스트입니다:
채널 컨텍스트는 부모 팀 컨텍스트를 가지며, 그 부모는 시스템 컨텍스트입니다. 예를 들어, “Developers Hangout” 채널은 채널 컨텍스트이며, 부모 팀 컨텍스트는 “Contributors Team”이고, 그 부모는 시스템 컨텍스트입니다.
팀 컨텍스트는 부모 시스템 컨텍스트와 자식 채널 컨텍스트를 가집니다. 예를 들어, “Contributors Team”은 팀 컨텍스트이며, 부모 시스템 컨텍스트와 “Developers Hangout”, “Reception”, “Marketing”과 같은 자식 채널 컨텍스트를 가집니다.
사용자가 주어진 컨텍스트에서 주어진 작업을 수행할 수 있는지 여부를 결정할 때, 해당 사용자가 현재 컨텍스트와 그 부모 컨텍스트에서 할당받은 모든 역할의 권한의 합집합이 계산됩니다. 이를 통해 권한이 범위 계층 구조를 따라 계단식으로 내려갈 수 있습니다. 예를 들어, 사용자가 시스템 컨텍스트의 역할에서 manage_public_channel_properties 권한을 부여받았다면, 해당 사용자는 자신이 멤버인 모든 팀의 모든 채널에서 공개 채널 속성을 관리할 수 있는 권한을 가집니다.
스키마#
스키마는 컨텍스트와 모든 자식 컨텍스트에서 사용자에게 적용되는 기본 역할을 설명합니다. 스키마는 특정 컨텍스트에 대해 정의되거나, 지정되지 않은 경우 부모 컨텍스트의 스키마의 관련 부분이 적용되며, 궁극적으로 시스템 전체 기본값을 제공하는 목적을 수행하는 시스템 스키마까지 계층 구조를 따라 올라갑니다. 예를 들어, 팀 A에 팀 범위 스키마가 정의되어 있지 않다면, 시스템 스키마가 팀 A의 모든 컨텍스트에 대한 기본값을 제공합니다.
또한, 가장 낮은 범위의 스키마가 항상 컨텍스트에서 우선순위를 가집니다. 예를 들어, 팀 B에 팀 범위 스키마가 있다면, 해당 스키마가 팀 B의 모든 컨텍스트에 대해 시스템 스키마 기본값보다 우선순위를 가집니다.
데이터 구조#
권한#
Mattermost의 권한은 서버 코드베이스의 속성이며 동적으로 생성되거나 수정되지 않습니다. 현재 권한 세트는 아래 표에 설명되어 있습니다.
Mattermost 권한
이름 (i18n) |
범위 |
설명 |
|---|---|---|
invite_user |
팀 |
이메일 초대 보내기 또는 팀 초대 링크 가져오기를 사용하여 팀에 사용자 초대하기 |
add_user_to_team |
팀 |
현재 팀에 기존 서버 사용자 추가하기 |
manage_slash_commands |
시스템 |
자신의 슬래시 명령어 생성, 편집 및 삭제하기 |
manage_others_slash_commands |
시스템 |
다른 사용자의 슬래시 명령어 편집 또는 삭제하기 |
create_public_channel |
팀 |
공개 채널 생성하기 |
create_private_channel |
팀 |
비공개 채널 생성하기 |
manage_public_channel_members |
채널 |
공개 채널 멤버 관리하기 |
manage_private_channel_members |
채널 |
비공개 채널 멤버 관리하기 |
assign_system_admin_role |
시스템 |
다른 사용자에게 시스템 관리자 역할 부여하기 |
manage_roles |
시스템 |
다른 사용자의 시스템 전체 역할 관리하기 |
manage_team_roles |
팀 |
팀 멤버 추가 및 제거하기 |
manage_channel_roles |
채널 |
채널 멤버 추가 및 제거하기 |
manage_system |
시스템 |
시스템 콘솔 접근하기 |
sysconsole_read_usermanagement_system_roles |
시스템 |
시스템 역할 보기 |
sysconsole_write_usermanagement_system_roles |
시스템 |
시스템 역할 추가, 제거 및 할당하기 |
create_direct_channel |
시스템 |
다이렉트 메시지 채널 열기 |
create_group_channel |
시스템 |
그룹 메시지 채널 열기 |
manage_public_channel_properties |
채널 |
공개 채널 이름, 헤더 및 목적 편집하기 |
manage_private_channel_properties |
채널 |
비공개 채널 이름, 헤더 및 목적 편집하기 |
list_public_teams |
시스템 |
메인 메뉴에서 접근 가능한 “다른 팀 참여” 메뉴에 나열된 공개 팀 보기 |
join_public_teams |
시스템 |
메인 메뉴에서 접근 가능한 “다른 팀 참여” 메뉴에 나열된 공개 팀에 참여하기 |
list_private_teams |
시스템 |
메인 메뉴에서 접근 가능한 “다른 팀 참여” 메뉴에 나열된 비공개 팀 보기 |
join_private_teams |
시스템 |
메인 메뉴에서 접근 가능한 “다른 팀 참여” 메뉴에 나열된 비공개 팀에 참여하기 |
list_team_channels |
팀 |
팀의 공개 채널 목록 보기 |
join_public_channels |
팀 |
공개 채널 참여하기 |
delete_public_channel |
채널 |
공개 채널 보관하기 |
delete_private_channel |
채널 |
비공개 채널 보관하기 |
edit_other_users |
시스템 |
다른 사용자의 user 객체 값 편집하기 |
read_channel |
채널 |
채널의 게시물 보기 |
read_channel_contents |
채널 |
채널의 내용 읽기 |
read_public_channel |
팀 |
팀의 공개 채널 보기 및 접근하기 |
add_reaction |
채널 |
게시물에 이모지 반응 추가하기 |
remove_reaction |
채널 |
게시물에서 이모지 반응 제거하기 |
remove_others_reactions |
채널 |
게시물에서 다른 사용자의 이모지 반응 제거하기 |
permanent_delete_user (deprecated) |
시스템 |
다른 사용자 영구 삭제하기 |
upload_file |
채널 |
게시물에 파일 첨부하기 |
get_public_link |
시스템 |
게시물의 고정 링크 가져오기 |
manage_incoming_webhooks |
팀 |
자신의 인커밍 웹훅 생성, 편집 및 삭제하기 |
manage_outgoing_webhooks |
팀 |
자신의 아웃고잉 웹훅 생성, 편집 및 삭제하기 |
manage_others_webhooks(deprecated) |
팀 |
다른 사용자의 인커밍 또는 아웃고잉 웹훅 편집 및 삭제하기 |
manage_others_incoming_webhooks |
팀 |
다른 사용자의 인커밍 웹훅 편집 및 삭제하기 |
manage_others_outgoing_webhooks |
팀 |
다른 사용자의 아웃고잉 웹훅 편집 및 삭제하기 |
manage_oauth |
시스템 |
자신의 OAuth 2.0 앱 생성, 편집 및 삭제하기 |
manage_system_wide_oauth |
시스템 |
다른 사용자의 OAuth 2.0 앱 편집 또는 삭제하기 |
create_post |
채널 |
채널에 게시하기 |
create_post_public |
채널 |
채널 내에 시스템 메시지 생성하기 |
create_post_ephermal |
채널 |
채널 내에 임시 메시지 생성하기 |
edit_post |
채널 |
작성자가 자신의 게시물 편집하기 |
edit_others_posts |
채널 |
다른 사용자의 게시물 편집하기 |
delete_post |
채널 |
작성자가 자신의 게시물 삭제하기 |
delete_others_posts |
채널 |
다른 사용자의 게시물 삭제하기 |
remove_user_from_team |
팀 |
팀에서 사용자 제거하기 |
create_team |
시스템 |
팀 생성하기 |
manage_team |
팀 |
팀 설정에 접근하기 |
import_team |
시스템 |
팀 설정에서 팀 가져오기 |
view_team |
팀 |
팀 객체 읽기 |
create_bot |
팀 |
봇 계정 생성하기 |
assign_bot |
팀 |
봇을 생성한 사용자 외의 다른 사용자에게 봇 할당하기 |
read_bot |
팀 |
자신이 생성한 봇 보기 |
read_others_bots |
팀 |
다른 사용자가 생성한 봇 보기 |
manage_bots |
팀 |
자신의 봇 편집 및 삭제하기 |
manage_others_bots |
팀 |
다른 사용자가 생성한 봇 편집 및 삭제하기 |
view_members |
팀 |
팀의 모든 구성원 목록 보기 |
list_users_without_team |
시스템 |
팀이 없는 사용자 목록 보기 |
create_user_access_token |
시스템 |
사용자 액세스 토큰 생성하기 |
read_user_access_token |
시스템 |
ID로 사용자 액세스 토큰 읽기 |
revoke_user_access_token |
시스템 |
사용자 액세스 토큰 취소하기 |
manage_jobs |
시스템 |
작업 생성 및 취소하기 |
create_emojis |
팀 |
사용자 정의 이모지 생성하기 |
delete_emojis |
팀 |
자신의 사용자 정의 이모지 삭제하기 |
delete_others_emojis |
팀 |
다른 사용자가 생성한 사용자 정의 이모지 삭제하기 |
invite_guest |
시스템 |
이메일 초대를 통해 게스트 사용자 초대하거나 기존 게스트를 팀에 추가하기 |
promote_guest |
시스템 |
Promote guests to member users. |
demote_to_guest |
시스템 |
멤버 사용자를 게스트로 강등하기 |
manage_remote_clusters |
시스템 |
공유 채널을 위한 원격 클러스터 추가, 제거 및 보기 |
manage_post_bleve_indexes_job |
시스템 |
Bleve 게시물 인덱싱 작업의 상태 관리하기 |
manage_data_retention_job |
시스템 |
데이터 보존 작업의 상태 관리하기 |
manage_compliance_export_job |
시스템 |
규정 준수 내보내기 작업의 상태 관리하기 |
manage_elasticsearch_post_indexing_job |
시스템 |
Elasticsearch 게시물 인덱싱 작업의 상태 관리하기 |
manage_elasticsearch_post_aggregation_job |
시스템 |
Elasticsearch 게시물 집계 작업의 상태 관리하기 |
manage_ldap_sync_job |
시스템 |
LDAP 동기화 작업의 상태 관리하기 |
add_bookmark_public_channel |
채널 |
공개 채널에 북마크 추가하기 |
add_bookmark_private_channel |
채널 |
비공개 채널에 북마크 추가하기 |
edit_bookmark_public_channel |
채널 |
공개 채널의 북마크 변경하기 |
edit_bookmark_private_channel |
채널 |
비공개 채널의 북마크 변경하기 |
delete_bookmark_public_channel |
채널 |
공개 채널의 북마크 삭제하기 |
delete_bookmark_private_channel |
채널 |
비공개 채널의 북마크 삭제하기 |
order_bookmark_public_channel |
채널 |
공개 채널의 북마크 순서 변경하기 |
order_bookmark_private_channel |
채널 |
비공개 채널의 북마크 순서 변경하기 |
Roles 필드#
역할은 사용자의 멤버십을 나타내는 객체에 적용됩니다. 이는 User, TeamMember, ChannelMember 및 Schemes 테이블의 Roles 필드에서 참조됩니다.
TeamMember 와 ChannelMember 테이블에서 사용자 정의 역할을 포함하는 Roles 필드와 멤버 객체가 관련 팀에 할당된 기본 또는 사용자 정의 스키마에서 각각의 역할을 상속해야 함을 나타내는 SchemeAdmin 및 SchemeUser 불리언이 있습니다.
Roles 테이블#
역할은 동적이며 사용자가 구성할 수 있어 다음과 같은 필드가 있는 데이터베이스 테이블이 필요합니다:
Id(자동 증가, 기본 키)Name(문자 제약 조건이 있는 고유 문자열, 예: “team_user”)Display Name(문자열)Description(문자열)Permissions(문자열): 공백으로 구분된 권한 이름Scheme Managed(불리언): 이 역할이 스키마의 일부로 관리되는지 여부를 나타냅니다.BuiltIn(불리언): 이 역할이 Mattermost 시스템에 내장되어 있고 사용자가 제거할 수 없는지 여부를 나타냅니다.
내장 역할#
시스템 스키마는 제품에 내장되어 있으며, 그 역할은 Roles 테이블에서 BuiltIn: true 로 정의됩니다. Mattermost API를 사용하여 역할 이름별로 권한 목록을 검색 할 수 있습니다.
다음 기본 권한이 있는 내장 역할을 사용할 수 있습니다:
channel_admin
manage_private_channel_members
read_public_channel_groups
use_channel_mentions
create_post
use_group_mentions
add_reaction
read_private_channel_groups
remove_reaction
manage_public_channel_members
manage_channel_roles
add_bookmark_public_channel
edit_bookmark_public_channel
delete_bookmark_public_channel
order_bookmark_public_channel
add_bookmark_private_channel
edit_bookmark_private_channel
delete_bookmark_private_channel
order_bookmark_private_channel
channel_guest
read_channel
read_channel_contents
add_reaction
remove_reaction
upload_file
edit_post
create_post
use_channel_mentions
channel_user
manage_public_channel_properties
use_group_mentions
add_reaction
delete_private_channel
manage_private_channel_members
read_private_channel_groups
delete_public_channel
read_public_channel_groups
use_channel_mentions
read_channel
read_channel_contents
delete_post
get_public_link
remove_reaction
manage_public_channel_members
upload_file
manage_private_channel_properties
create_post
edit_post
add_bookmark_public_channel
edit_bookmark_public_channel
delete_bookmark_public_channel
order_bookmark_public_channel
add_bookmark_private_channel
edit_bookmark_private_channel
delete_bookmark_private_channel
order_bookmark_private_channel
system_admin
manage_others_slash_commands
sysconsole_write_user_management_permissions
edit_brand
remove_reaction
manage_incoming_webhooks
sysconsole_write_user_management_groups
create_public_channel
manage_private_channel_members
sysconsole_write_authentication
join_private_teams
create_post_ephemeral
list_users_without_team
sysconsole_write_reporting
join_public_channels
invite_guest
list_private_teams
sysconsole_write_user_management_channels
manage_others_bots
read_user_access_token
add_user_to_team
view_members
edit_post
demote_to_guest
delete_others_posts
sysconsole_write_plugins
delete_private_channel
sysconsole_read_user_management_system_roles
sysconsole_read_user_management_users
revoke_user_access_token
read_others_bots
read_public_channel_groups
sysconsole_write_user_management_teams
sysconsole_write_billing
convert_public_channel_to_private
remove_user_from_team
manage_team
add_reaction
manage_oauth
list_team_channels
create_team
read_jobs
invite_user
manage_shared_channels
remove_others_reactions
manage_remote_clusters
sysconsole_write_user_management_users
sysconsole_read_experimental
sysconsole_write_compliance
edit_others_posts
assign_bot
manage_bots
manage_others_outgoing_webhooks
manage_system_wide_oauth
delete_others_emojis
manage_others_incoming_webhooks
promote_guest
sysconsole_write_experimental
sysconsole_read_plugins
create_group_channel
sysconsole_read_environment
manage_roles
use_channel_mentions
manage_public_channel_properties
manage_channel_roles
get_public_link
sysconsole_read_billing
sysconsole_write_integrations
download_compliance_export_result
manage_slash_commands
assign_system_admin_role
create_post
delete_post
create_direct_channel
list_public_teams
create_post_public
read_private_channel_groups
sysconsole_read_integrations
read_other_users_teams
manage_jobs
sysconsole_read_site
manage_outgoing_webhooks
sysconsole_write_environment
manage_system
sysconsole_read_user_management_permissions
manage_public_channel_members
sysconsole_write_about
import_team
sysconsole_write_user_management_system_roles
sysconsole_read_reporting
upload_file
read_channel
read_channel_contents
sysconsole_read_user_management_teams
delete_emojis
manage_private_channel_properties
view_team
sysconsole_read_user_management_groups
create_private_channel
create_bot
join_public_teams
delete_public_channel
read_public_channel
sysconsole_read_about
read_bots
sysconsole_read_authentication
edit_other_users
sysconsole_read_user_management_channels
convert_private_channel_to_public
use_group_mentions
create_user_access_token
sysconsole_write_site
manage_team_roles
sysconsole_read_compliance
create_emojis
manage_post_bleve_indexes_job
manage_data_retention_job
manage_compliance_export_job
manage_elasticsearch_post_indexing_job
manage_elasticsearch_post_aggregation_job
manage_ldap_sync_job
add_bookmark_public_channel
edit_bookmark_public_channel
delete_bookmark_public_channel
order_bookmark_public_channel
add_bookmark_private_channel
edit_bookmark_private_channel
delete_bookmark_private_channel
order_bookmark_private_channel
system_custom_group_admin
생성하기
편집하기
삭제하기
구성원 관리하기
복원하기
system_guest
create_group_channel
create_direct_channel
system_manager
sysconsole_write_user_management_permissions
sysconsole_read_about
sysconsole_read_user_management_channels
join_private_teams
delete_private_channel
view_team
read_jobs
sysconsole_read_user_management_teams
sysconsole_read_plugins
manage_channel_roles
manage_public_channel_members
remove_user_from_team
sysconsole_read_environment
list_private_teams
manage_private_channel_members
manage_private_channel_properties
edit_brand
add_user_to_team
convert_public_channel_to_private
read_private_channel_groups
sysconsole_write_environment
manage_jobs
sysconsole_read_reporting
read_public_channel
manage_team
read_channel
sysconsole_read_integration
read_public_channel_groups
list_public_teams
manage_team_roles
sysconsole_read_user_management_groups
manage_public_channel_properties
sysconsole_write_user_management_groups
sysconsole_read_user_management_permissions
sysconsole_write_site
sysconsole_read_site
sysconsole_write_user_management_channels
sysconsole_write_integrations
delete_public_channel
sysconsole_write_user_management_teams
join_public_teams
system_post_all
create_post
use_channel_mentions
use_group_mentions
system_post_all_public
create_post_public
use_group_mentions
use_channel_mentions
system_read_only_admin
sysconsole_read_compliance
read_other_users_teams
sysconsole_read_reporting
list_private_teams
sysconsole_read_experimental
read_jobs
read_public_channel
view_team
sysconsole_read_user_management_users
sysconsole_read_plugins
sysconsole_read_user_management_teams
read_public_channel_groups
sysconsole_read_user_management_channels
sysconsole_read_user_management_permissions
sysconsole_read_about
download_compliance_export_result
read_channel
sysconsole_read_authentication
sysconsole_read_site
list_public_teams
sysconsole_read_integrations
read_private_channel_groups
sysconsole_read_environment
sysconsole_read_user_management_groups
system_user
list_public_teams
join_public_teams
create_direct_channel
create_group_channel
view_members
create_team
create_emojis
delete_emojis
system_user_access_token
create_user_access_token
read_user_access_token
revoke_user_access_token
system_user_manager
manage_public_channel_members
sysconsole_write_user_management_groups
manage_private_channel_properties
read_channel
sysconsole_read_authentication
manage_private_channel_members
read_jobs
view_team
sysconsole_read_user_management_groups
list_private_teams
join_public_teams
manage_team
list_public_teams
add_user_to_team
sysconsole_read_user_management_channels
sysconsole_write_user_management_teams
read_public_channel
sysconsole_read_user_management_permissions
manage_public_channel_properties
join_private_teams
convert_public_channel_to_private
manage_channel_roles
sysconsole_read_user_management_teams
read_public_channel_groups
delete_public_channel
remove_user_from_team
manage_team_roles
delete_private_channel
sysconsole_write_user_management_channels
read_private_channel_groups
team_admin
remove_user_from_team
manage_others_slash_commands
manage_team_roles
manage_public_channel_members
use_group_mentions
manage_others_outgoing_webhooks
manage_slash_commands
manage_team
manage_others_incoming_webhooks
manage_channel_roles
read_public_channel_groups
remove_reaction
delete_post
manage_outgoing_webhooks
use_channel_mentions
manage_incoming_webhooks
delete_others_posts
read_private_channel_groups
create_post
manage_private_channel_members
convert_public_channel_to_private
add_reaction
import_team
add_bookmark_public_channel
edit_bookmark_public_channel
delete_bookmark_public_channel
order_bookmark_public_channel
add_bookmark_private_channel
edit_bookmark_private_channel
delete_bookmark_private_channel
order_bookmark_private_channel
team_guest
view_team
team_post_all
create_post
use_group_mentions
use_channel_mentions
team_post_all_public
use_group_mentions
create_post_public
use_channel_mentions
team_user
invite_user
add_user_to_team
list_team_channels
join_public_channels
read_public_channel
view_team
create_public_channel
create_private_channel
Schemes 테이블#
Schemes는 동적이며 사용자가 구성할 수 있어, 다음과 같은 필드가 있는 데이터베이스 테이블이 필요합니다:
Id(자동 증가, 기본 키)Name(문자 제약조건이 있는 고유 문자열, 예: “corporate_scheme”)Display이름Description(문자열)Scope(문자열): Team 또는 ChannelTeam Admin Role(문자열): Channel Scope인 경우 비어있음Team User Role(문자열): Channel Scope인 경우 비어있음Team Guest Role(문자열): Channel Scope인 경우 비어있음Channel Admin Role(문자열): 항상 제공됨Channel User Role(문자열): 항상 제공됨Channel Guest Role(문자열): 항상 제공됨