プロテクションの実装のしくみ
このトピックは、『Helix Core P4コマンドリファレンス』のp4 protectコマンドの説明を既に読んでいるということを前提としています。
ユーザがコマンドを実行すると、サーバはプロテクションテーブルを読み込み、一致するユーザ、グループ、IPアドレス、ファイルパス、アクセスレベルが含まれている行を検索します。
一致する行が複数見つかった場合は、最後に見つかった行が優先されます。
プロテクションテーブルには、以下の情報を保管するための列が含まれています。
- writeやsuperなどのアクセスレベル
- groupまたはuser - テーブルの長さを短くするため、ユーザをグループとしてまとめることをお勧めします
- groupまたはuserの名前 - ワイルドカードとして「*」を使用できますが、具体的なグループ名を指定することをお勧めします。
- サーバ(ホスト)のIPアドレス - 任意のIPアドレスを指定する場合は、ワイルドカードとして「*」を使用することがでできます。
- コメント(先頭に「##」が指定されているテキスト)
プロテクションテーブルの形式は、以下のようになっています。
write group Dev1 * //depot/... list group Dev1 * -//depot/proj/... ## exclusionary mapping write user Maria 192.168.100.0/24 //... super user Alice * //... ## put super user at the bottom
ユーザMaria
がDev1
グループのメンバーで、このグループ内でIPv4接続を使用している場合、Mariaは以下に示す4つのコマンドを実行します。
操作元IPアドレス... | マリアが実行するコマンド | 結果 |
---|---|---|
|
|
Dev1グループは、proj領域を除き、ディポ内の任意の場所に書き込むことができるため、このコマンドは正常に実行されます。 |
|
|
-//depot/proj/...ディレクトリのexclusionaryマッピングにより、このディレクトリ内のファイルに対するマリアの権限がすべて削除されるため、このコマンドは失敗します。 |
|
|
このIPアドレスの場合、マリアのwrite権限には印刷機能が暗示的に含まれているため、このコマンドは正常に実行されます。 最後に見つかった一致行が優先されます。 |
|
|
p4 verifyコマンドを実行する場合は |
除外マッピングがない場合は、最も権限レベルの高い行が優先される
除外マッピングの先頭にはマイナス符号(-)が指定されています。 例: -//depot/dev/productA/...
マリアがDev1グループとDev2グループにメンバーとして属していて、プロテクションテーブルに除外マッピングが含まれていないと仮定します。
write group Dev2 * //depot/dev/... read group Dev1 * //depot/dev/productA/... write group Dev1 * //depot/elm_proj/...
この場合、Dev2グループのすべてのメンバーがp4 edit //depot/dev/productA/readme.txtコマンドを実行できるため、マリアもこのコマンドを実行することができます。
ユーザが複数のグループに属していて、そのうち1つ以上のグループに特定のコマンドの実行権限が設定されている場合、そのユーザはそのコマンドを実行することができます。
以前の包含は除外によって上書きされる
ここでは、マリアによるproductAディレクトリ内のファイルの編集を禁止する除外マッピング-//depot/dev/productA/...がプロテクションテーブル内に含まれていると仮定します。
write group Dev1 * //depot/dev/... ## Maria is a member of Dev1 list group Dev1 * -//depot/dev/productA/... ## exclusionary mapping overrides the line above super group super-users * //... ## Maria is NOT a member
この場合、マリアは/depot/dev/productA/...ディレクトリから除外されいて、それよりも下の行にこの除外を上書きするコードも記述されていないため、Mariaはp4 edit //depot/dev/productA/readme.txtコマンドを実行することはできません。
除外マッピングと管理者
例えば、次を実行するとします。
write group Dev1 * //depot/dev/... write group Dev1 * -//depot/dev/productA/... super group super-users * //...
Dev1グループのメンバーには、productAに対するアクセス権が設定されていません。
ただし、管理者グループについては以下のように設定されています。
admin group Admins * //depot/... write group Admins * -//depot/dev/productA/... super group super-users * //...
この場合、AdminsグループのメンバーはproductAディレクトリ内のファイルは編集できませんが、p4 changesなどの管理コマンドについては、実行することができます。
除外マッピングが存在する場合と存在しない場合
除外マッピングが存在しない場合 |
除外マッピングが存在する場合 |
---|---|
|
|
除外マッピングと「=」
ファイルパスの前に「-」を指定 |
write group Dev1 * //depot/dev/... list group Rome * -//depot/dev/prodA/... ## exclusion of list implies no read, no write, etc. read group Rome * //depot/dev/prodA/... ## Rome can only read this one path write group Dev2 * //depot/elm_proj/... super user Anne * //... |
ファイルパスの前に「-」を指定し、アクセスレベルの前に「=」を指定 |
write group Dev1 * //depot/dev/... =read group Rome * -//depot/dev/prodA/... ## Rome cannot read this one path write group Dev2 * //depot/elm_proj/... super user Anne * //... |
『Helix Core P4コマンドリファレンス』のp4 protectコマンドの説明で、「権限レベルとアクセス権限」を参照してください。
アクセスレベルと「=」
行の内容 | ... 指定されたユーザ、IPアドレス、ファイルパスに対する動作 |
---|---|
read group Dev1 * -//depot/dev/prodA/... | readレベル以下のアクセス権が拒否されます。 |
=read group Dev1 * -//depot/dev/prodA/... | readアクセス権が拒否されますが、それよりも下位レベルのアクセス権については許可されます。 |
open group Dev1 * -//depot/dev/prodA/... | openレベル以下のアクセス権が拒否されます。 |
=open group Dev1 * -//depot/dev/prodA/... | openアクセス権が拒否されますが、それよりも下位レベルのアクセス権については許可されます。 |
write group Dev1 * -//depot/dev/prodA/... | writeレベル以下のアクセス権が拒否されます。 |
=write group Dev1 * -//depot/dev/prodA/... | writeアクセス権が拒否されますが、それよりも下位レベルのアクセス権については許可されます。 |
read、open、writeとは異なり、=branchには必ず「=」が付加されます。 | |
=branch group Dev1 * -//depot/dev/prodA/... | 指定されたパスに対する反映処理が拒否されます。 |