🖼️

メニューの出し分けをUIに依存しない形で表現する権限管理の考え方

2023/12/11に公開

背景: Voicyにおけるチャンネルと配信者

音声配信プラットフォームのVoicyでは、配信者は自分と関わりのあるチャンネルに対して音声コンテンツを作成することができます。

チャンネルと配信者の間には、

  • オーナー: チャンネルを作った人
  • コラボレーター: チャンネルの管理を任された人
  • ビューアー: チャンネルの音声コンテンツを、関係者として確認することができる人

といった関係が成立します。

このビューアーだけが、紐づけられたそのチャンネルを配信者専用画面から操作することができず、一般向けの画面でコンテンツを確認することになります。(ただしその際、有料のコンテンツを購入不要で確認することができます。)

ビューアーにかかるUI的な制限をどう扱うべきか

ビューアーは紐づけられたチャンネルを配信者専用画面から操作することができない
(オーナー、コラボレーターは紐づけられたチャンネルを配信者専用画面から操作することができる)

この、UIの挙動を制御しているかのように聞こえるルールを、UIの存在を知らなくてもいいはずの権限管理の領域でどう扱うべきかを、ここから考えていきたいと思います。

チャンネルの関係者を扱う領域

特定のチャンネルには特定の配信者(たち)が関わっている。このことは間違いなく成立しているので、このルールを支えるソフトウェアの部品を下記のように表現することができます。

さらに、チャンネルに関わる配信者(たち)は、それぞれチャンネル内での役割を持っているので、このことを加味すると下記のようになります。

チャンネル内での役割のところに、前述したオーナー・コラボレーター・ビューアーが入ってきます。

オーナー・コラボレーター・ビューアーの意味を問う

さてここで、この「チャンネルの関係者を扱う領域」に、オーナー・コラボレーター・ビューアーはそれぞれどういう意味を持っているのかを聞いてみると、どういう答えが返ってくるのでしょうか。

ソフトウェアの視点に立ってみると、異なる記号が三つ存在する以上のことは実は何も答えられない、ということに気づきます。これらの記号から言外の意味を読み取っているのは我々設計者の方だったのです。

この記号までしか分からないという見方を念頭に、前述したビューアーのUI的制限の表現について考えてみましょう。

役割の記号を外部で解釈する考え方

「チャンネルの関係者を扱う領域」が提供する役割の記号を、他の領域が利用することができます。その他の領域のうちの一つが、「UIの挙動を制御する領域」である、と考えることができ、下記のようなコードで配信者専用画面への遷移を制御することができます。

// 配信者iがチャンネルjに対して持っている役割を、チャンネルの関係者を扱う領域に聞く
switch 配信者iがチャンネルjに対して持っている役割 {
case オーナー:
  配信者専用画面への遷移を許可する
case コラボレーター:
  配信者専用画面への遷移を許可する
case ビューアー:
  配信者専用画面への遷移を拒否する
}

この考え方が意味すること

  • 「チャンネルの関係者を扱う領域」は役割の違いまでしか区別しておらず、役割の解釈は利用者に任せている
    • 権限管理の源流であり、UIを意識しない部分である
  • 「UIの挙動を制御する領域」が、UIに関わる権限を管理している
    • 権限管理の再解釈であり、UIを扱うためにUIを意識している

行動の記号を内部に持たせる考え方

「チャンネルの関係者を扱う領域」を拡張して、領域内でちゃんと役割を解釈できるようにする(ただの記号ではなくする)というやり方を取ることもできます。

この場合、役割は行動の集まりとして解釈され、代わりに行動の方が雑多に羅列されている記号になります。

この行動の記号のうちの一つとして、「配信者専用画面から操作することを意味する記号」を用意することができます。「チャンネルの関係者を扱う領域」にはただの暗号めいた名前に見えるので、UIを意識したことにはなりません。

この場合、「UIの挙動を制御する領域」は下記のような挙動を取ります。

// 配信者iがチャンネルjに対して、配信者専用画面から操作するという行動を起こせるかどうかを、
// チャンネルの関係者を扱う領域に聞く
if 配信者iがチャンネルjに対して、配信者専用画面から操作するという行動を起こせる {
  配信者専用画面への遷移を許可する
} else {
  配信者専用画面への遷移を拒否する
}

この考え方が意味すること

  • 「チャンネルの関係者を扱う領域」は行動/権限の一元管理を行っている
    • 行動の記号の意味を深読みできず、結果的にUIを意識したことにならない
  • 「UIの挙動を制御する領域」は、自分が確認するべき「チャンネルの関係者を扱う領域」側の行動/権限を把握している

おまけ: Voicyアドベントカレンダー2023

この記事は、Voicyアドベントカレンダー2023の掲載記事でもあります。他の記事もぜひご覧になってください。

Voicyテックブログ

Discussion