GH GambleHub

役割とアクセスによるインタフェース

1)原則

1.セキュリティ=UXタスク。ユーザーは「灰色の領域」がなければ何ができるか、何ができないかを明確に理解しなければなりません。
2.必要最小限の権利。ディスプレイからアクションまで、すべてがロールタスクに限定されています。
3.信号禁止の代わりに。アクセスがない場合は、その理由と取得方法(リクエスト、申請、トレーニング)を説明します。
4.サーバー上での重複。UIガードはサーバーチェックを置き換えることはありません。
5.透明な監査。各敏感な行為は読みやすい印を残します。


2)アクセス制御モデル

RBAC(ロールベース):固定ロール:プレーヤー、サポート、ファイナンス、リスク/コンプライアンス、アフィリエイトマネージャー、モデレーター、管理者。
ABAC(属性ベース):属性ベースのポリシー(管轄、ブランド、タイムゾーン、VIPレベル、チーム、シフト)。
ReBAC(リレーションシップベース):リレーションシップ(プレイヤーハンドラー、チケットホルダー、パートナーマネージャー)によるアクセス。
SoD(職務の分離)-重要なタスクの分離(作成≠承認)。

練習:基礎としてRBAC、微調整のためのABAC(ブランド/地域)、財政/限界のためのSoD、 ReBAC-ポイント(キュレーションされたポートフォリオ)。


3)役割別機能マップ(iGaming例)

[セクション]プレーヤーサポートファイナンスコンプライアンス/リスクアフィリエイト管理者(Administrator)
プロフィール/制限(own)R/W(要求あり次第)R (R)R/W(制限)RR (R)
支払い(入金/出金)(own)R (R)R/W(投稿)R/W(凍結/保持)R (R)R (R)
CMC/ドキュメント(own)R(一部マスク)R(マスク)R/W(評決)R (R)
ベット/履歴(own)R (R)R (R)R (R)R (R)
プロモーション/ボーナスR/W(充満)R (R)R/W(パートナー)R (R)
ユーザーR(チケット)R (R)R(パートナー)R/W
R-読み取り、W-書き込み。マスキング-データポリシー(PII/PAN/KYC)による。

4)権利と役割のUXパターン

4.1ナビゲーションと可視性

ナビゲーション(ノイズ低減)からアクセスできないセクションを非表示にしますが、可能性を理解するのに役立ちます。
一時的に利用できない場合-「ロック」ヒント:理由、要件、CTA「リクエストアクセス」。

4.2行動の状態

無効+ツールチップ:"ファイナンスの役割が必要です。アクセスをリクエストします。
読み取り専用モード:fields "under the glass'、明示的なマーカー"Read-only"。
エスカレーション-[Apply]ではなく[Submit for Approval]をクリックします。

4.3マスキングと編集

PII(電子メール、電話、住所)-'user@'、'+380 90'他の人のレコードのために。
PAN/IBAN-トークンのみ/最後の4。
[完全なラジオボタンを表示]-ロールの所有のみ/監査イベントによる。


5) UIのパーミッションアーキテクチャ

クライアントのポリシーコンテキスト:パーミッションキャッシュ(TTL短い)+更新のサブスクリプション。
ルートガード:アクセスできないルート→403ページの説明とCTA。
コンポーネントガード:'Can ({action:' approve_in'、リソース:'payout'})'。
Ficheflags:実験的/季節的なもの-権利とは別。

スニペット(React):
tsx type Permission = string; // 'payout.approve', 'kyc.view_masked'
type Policy = { has:(p:Permission)=>boolean };
const PolicyCtx = React.createContext<Policy>({ has:()=>false });
export const Can: React.FC<{perm:Permission, children:React.ReactNode, fallback?:React.ReactNode}>
= ({perm, children, fallback=null}) => {
const { has } = React.useContext(PolicyCtx);
return has(perm)? <>{children}</>: <>{fallback}</>;
};

6)サーバー>クライアント

任意のアクションは、マーク(ロール、属性)を持つトークンによってサーバーによって確認されます。
ポリシーは一元化されています(PDP/OPA/Cedar/Zanzibar-like)。
すべての重要な操作-2要素確認+監査。


7)マスキングおよび赤いデータゾーン

データカテゴリ:
  • PII:名前、電子メール、電話、住所、生年月日。
  • ファイナンス:PAN/IBAN/暗号財布、金額、限度額、ボーナス残高。
  • 書類:パスポート/ID/selfies (KYC)。
  • ゲーム:賭けの歴史/賞金/パターン。
表示ポリシー:
  • フル所有のロール/レコードオーナー。
  • マスク-サポート、金融(所有者ではない)。
  • 集計-分析(IDなし)。
マスキングコンポーネント:
tsx function Redact({text, perm}:{text:string, perm:Permission}){
const { has } = React.useContext(PolicyCtx);
return <span>{has(perm)? text: text.replace(/.(?=.{4})/g,'•')}</span>;
}

8)承認とSoDフロー

4つの目:イニシエータ≠承認者。
マルチステージルート(たとえば、金額>X→2行目)。
アプリケーションの有効性、SLA、エスカレーション。
マガジン:誰が作成しました、誰が変更しました、誰が承認しました、いつ、どこから。

例:撤退の確認、選手制限の変更、KYCの評決、制裁フラグの削除。


9) iGamingの詳細

制限と自己除外:SoDと必須のユーザー通知でのみ変更します。
KYC/AML:ドキュメントアクセス-狭い役割;サムネイルのプレビュー、フルサイズ-ログと別のアクションで。
制裁/RAPフラグ:リスクチームに表示されます。サポート-ステータスのみ「確認が必要」。
支払い/アウトプット:ポスト/拒否-財務会計の役割のみ;しきい値以上の金額-二重確認。
ベッティングログ:サポートは読み取りますが、編集は行いません。調整-調査と別の関数。


10)ローカライズ、A11y、 RTL

「no access」テキストはローカライズされ、有効なパス(アプリケーション/トレーニング)が含まれています。
フォーカスコントロール:説明なしでユーザーを「空白」ページに転送しないでください。
RTLモードは、各リージョンのロールでサポートされています。
A11y: 'aria-disabled'+説明、キーボードのエスカレーションの可用性。


11)条件とエラー

403(対象外):ロールコンテキストと「リクエストアクセス」CTAを持つフレンドリーなページ。
404(リソースなし):隠されたオブジェクトの存在を明らかにしないでください。
413/422(あまりにも多く/検証):ポリシーの詳細を漏らさないでください、中立的に定式化します。
Rate-limits/locks:タイマー/ロック解除条件を説明します。


12)メトリクス

アクセス拒否レート:ロール/画面による障害レート(IAまたはポリシー信号の不良)。
承認SLA:フローによる承認時間の中央値(出力、制限、KYC)。
Mask Reveal Events: PIIの「Reveal」率(小さいと正当化されると予想される)。
エラー解決:403から付与されたアクセスまでの時間。
Lost-Privilege Drift:冗長な権利を持つ役割(使用による検出可能性)。


13)アンチパターン

「何も起こっていない」の下にエラーを隠します。
説明のない空のボタンを表示します。
所有者を自分のデータでマスクします。
サーバーポリシーなしでUIガードに依存します。
ficheflagsとアクセス(異なるタスク)をミックスします。
便宜のためにサポート「神モード」を与えます。


14)システムトークンの設計(例)

json
{
"access": {
"badge": { "viewer":"#607D8B", "editor":"#4CAF50", "approver":"#FF9800", "admin":"#9C27B0" },
"lockColor": "#9E9E9E",
"maskChar": "•"
},
"states": {
"noAccess": { "bg":"var(--bg-elev)", "border":"var(--border)", "icon":"#9E9E9E" },
"approval": { "pending":"#FFC107", "approved":"#4CAF50", "rejected":"#F44336" }
},
"a11y": { "ariaDisabled": true, "explainDenial": true }
}

15)スニペットUI

ルートガード:
tsx import { Navigate, Outlet } from 'react-router-dom';
function GuardedRoute({perm}:{perm:Permission}){
const { has } = React.useContext(PolicyCtx);
if (has(perm)) return <Outlet/>;
return <Navigate to={`/403?perm=${encodeURIComponent(perm)}`} replace/>;
}
CTAが付いているアクセスカード無し:
html
<article class="no-access">
<h3>Недостаточно прав</h3>
<p>Доступ к разделу «Выплаты» доступен ролям: Финансы/Админ.</p>
<button class="btn" data-open-request>Запросить доступ</button>
</article>
監査ログ(略称):
json
{
"ts": "2025-11-03T18:45:12Z",
"actor": "u_5412",
"action": "payout.approve",
"target": "withdraw#w_91822",
"ip": "194...12",
"result": "success"
}

16) QAチェックリスト

ナビゲーションとIA

  • 利用できないセクションはメニューにノイズを発生させません。
  • CTAで明確な「アクセス不可」ページ/カードがあります。

アクションとガード

  • 権利のないボタン-'disabled'+tooltip/text。
  • 保護されたルート;ダイレクトURL→403説明付き。
  • サーバーは各アクションを確認します。

データ

  • PII/PAN/KYCはポリシーによってマスクされます。
  • 「開示」のログを作成し、レビューします。
  • エクスポート/レポートはロール(分析の集計)に対応します。

SoD/承認

  • イニシエータは彼のアプリケーションを承認することはできません。
  • しきい値の量→マルチステージルート。

А11у/Localization

  • 「No access」がローカライズされています。キーボードナビゲーションが動作します。
  • コントラスト/フォーカスリングはAAに対応しています。

信頼性について

  • 短いTTLでパーミッションキャッシュ;役割を変えるとき障害。
  • PDPドロップ→UIはデフォルトセーフモードです。

17)設計システムにおけるドキュメンテーション

-'GuardedRoute'、 'Can'、 'NoAccessCard'、 'ApprovalBanner'、 'Redact'。
ポリシー:ロール/アクションマトリックス、SoDルール、マスキングレベル。
プロセス:アクセスの要求、役割の訓練/証明、権利の改訂はN週に一度。
Do/Don 't gallery:「理由のない空のボタン」「、所有者に変装する」「、サーバーチェックのないUI」と「制限とCTAの説明」。


簡単な要約

ロールインターフェイスは、明確な情報アーキテクチャ+厳格なポリシー+フレンドリーな説明です。必要なものだけを表示し、機密データをマスクし、ルートと行動を警備員と保護し、監査のすべての重要なイベントを記録し、お金とコンプライアンスに影響を与える責任を共有します。iGamingでは、これはリスクを軽減するだけでなく、チームをより迅速かつ穏やかにします。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。