GitLab権限ガイド

GitLabには複数の権限の種類があり、権限を扱うものを実装するときはそれらすべてを考慮する必要があります。

グループとプロジェクト

一般権限

グループとプロジェクトは、以下の可視レベルを持つことができます:

  • 公開 (20) - エンティティは誰でも見ることができます。
  • 内部 (10) - エンティティはログインしたユーザーに表示されます。
  • 非公開 (0) - エンティティは、そのエンティティの承認者のみに表示されます。

デフォルトでは、サブグループに高い可視レベルを設定することはできません。 たとえば、非公開グループを新規作成した場合、公開サブグループを含めることはできません。

グループの可視性レベルは、すべてのサブグループとサブプロジェクトの可視性レベルが同じか低い場合にのみ変更できます。 たとえば、すべてのサブグループとプロジェクトが内部または非公開の場合にのみ、グループを内部に設定できます。

警告:既存のグループを低い可視性レベルに移行すると、そのアクションではサブグループは同じように移行されません。 これは既知のイシューです。

視認性のレベルは、Gitlab::VisibilityLevel モジュールで確認できます。

機能固有の権限

さらに、以下のプロジェクト機能は、異なる可視レベルを持つことができます:

  • イシュー
  • リポジトリ
    • マージリクエスト
    • パイプライン
    • コンテナレジストリ
    • git 大容量ファイルストレージ
  • Wiki
  • スニペット

これらの機能は、「誰でもアクセス可能」または「プロジェクトメンバーのみアクセス可能」に設定できます。 非公開プロジェクトはデフォルトでプロジェクトメンバーのみがアクセスできるため、公開プロジェクトまたは内部プロジェクトでのみ意味があります。

メンバー

ユーザーは複数のグループやプロジェクトのメンバーになることができます。 以下のアクセスレベルが利用できます(Gitlab::Access モジュールで定義):

  • アクセス不可 (0)
  • ゲスト (10)
  • レポーター (20)
  • 開発者 (30)
  • メンテナー (40)
  • オーナー (50)

ユーザーがプロジェクトとプロジェクトの親グループの両方のメンバーである場合、プロジェクトの権限の方が高くなります。

ユーザーがプロジェクトのメンバーであっても、親グループでない場合は、グループとそのエンティティ(エピックなど)を表示することができます。

プロジェクトメンバーシップ(グループメンバーシップがすでに考慮されている)は、project_authorizations テーブルに保存されます。

注意:イシューのため、個人ネームスペースのプロジェクトでは、project_authorizations テーブルにオーナー (50) 権限が表示されません。 user.owned_projectsは正しく計算されます。

機密の課題

機密イシューは、レポーター以上のプロジェクトメンバーのみがアクセスできます(ゲストはアクセスできません)。 さらに、作成者と担当者もアクセスできます。

ライセンス機能

一部の機能は、ユーザーが正しいライセンスプランを持っている場合にのみアクセスできます。

権限依存性

フィーチャー・ポリシーは非常に複雑で、複数のルールで構成されることがあります。 ある権限が別の権限に基づいていることがよくあります。

良い権限を設計するということは、既存の権限をできるだけ再利用し、機能へのアクセスを細かくするということです。

複雑なリソースの場合は、情報の断片に分割し、それぞれの断片に異なる権限を与えるべきです。

この場合の良い例は、マージリクエストウィジェットと_セキュリティ_レポート_です。_パイプラインの_可視性レベルによって、_セキュリティ_レポートはウィジェットに表示されたりされなかったりします。 そのため、_マージリクエストウィジェットパイプライン、_セキュリティ_レポートは別々の権限を持っています。 さらに、_マージリクエストウィジェットと__パイプラインの_権限は、_セキュリティ_レポートの依存関係にあります。

セキュア機能の権限依存性

セキュアな機能はマージリクエストやCIフローのような異なる機能にインテグレーションされているため、複雑な権限があります。

以下は権限依存のリストです。

アクティビティレベル リソース 所在地 権限依存
表示 ライセンス情報 扶養家族リスト、ライセンスコンプライアンス リポジトリの閲覧
表示 依存情報 扶養家族リスト、ライセンスコンプライアンス リポジトリの閲覧
表示 脆弱性情報 依存関係リスト セキュリティ調査結果の閲覧が可能
表示 プロジェクトのブラックリスト/ホワイトリストライセンス ライセンスコンプライアンス、マージリクエスト リポジトリの閲覧
表示 セキュリティ マージリクエスト、CIジョブページ、パイプラインセキュリティタブ プロジェクトと CI ジョブを読むことができます。
表示 脆弱性フィードバック マージリクエスト セキュリティ調査結果を読むことができます。
表示 依存関係一覧ページ プロジェクト 依存情報へのアクセスが可能
表示 ライセンスコンプライアンスのページ プロジェクト ライセンス情報へのアクセスが可能