gitlabの小ネタなのですが、1時間ほど考え込んでしまった事象がありましたので、記事にしてみました。
本記事に登場するGitLabは本記事用に立ち上げた環境です。
そのため、ユーザ名および、プロジェクト名などは適当です。
悩んだこと
直面した悩みとしては、「ダイレクトメンバーの1名が表示されない」というものです。
再現した画像と手順を以下に記載します。
GitLabのグループの保守作業。親グループ(parentGroupA)配下に属する、サブグループ(subGroupB)に存在しているダイレクトメンバーの削除を以下の手順で実施していました。
まず、subGroupBのアイコンを確認し、ダイレクトメンバの人数を見たところ3人存在することを確認しました。
つづいて、subGroupBのメンバー一覧を見たところ。管理者の(私)を含めても2名しか表示されていませんでした。
冒頭に記載しました通り、3名いるはずのダイレクトメンバーが2名しか見えないという状態のご紹介でした。
結論(解決策)
グループのメンバーの一覧にあるフィルターを使い、メンバーシップ = ダイレクト
を検索し、表示した結果、ダイレクトメンバーが3名分表示されました。これでメンバーを削除が無事にできました。
原因(事実からの推測)
調べたところ、taro.yamada
は、
- サブグループ(subGroupB)でダイレクトに
taro.yamada
へ与えた権限 - 親グループ(parentGroupA)で
taro.yamada
へ与えた権限が継承された権限※
※ 通常、GitLabで親グループの権限はそのままサブグループへ継承される
後者である親グループとして与えた権限のほうが、強権限だった。
つまり、gitlabでは、メンバーに対して重複した権限付与がなされている場合は、強権限が優先されて表示されるようだ。
裏どりのために、試しに、親グループ(parentGroupA)でtaro.yamada
へ付与している権限を、サブグループ(subGroupB)でダイレクトにtaro.yamada
へ与えている権限より下げたところ、subGroupBのメンバー一覧でtaro.yamada
が表示された。(メンバーシップ = ダイレクト
で絞り込みをせずとも表示された。)
推察
GitLabのマニュアルのsubgroupsを見ると、
https://docs.gitlab.com/ee/user/group/subgroups/
You can’t give a user a role in a subgroup that is lower than the roles the user has in parent groups. To override a user’s role in a parent group, add the user to the subgroup again with a higher role.
とあるので、上記のケースが生じていること自体がレアなんだと推察される。ただし、以下に記載したように、ダイレクトメンバー付与のオペレーション次第(権限の付与の順番次第)で本事象は起きるので注意。
権限付与途中でエラーになりはじかれるケース
1、親グループ(parentGroupA)でtaro.yamada
に強権限を付与(サブグループ(subGroupB)へ継承される)
2、サブグループ(subGroupB)でtaro.yamada
に弱権限を付与
→2の時点でtaro.yamada
には既に強い権限を持っているのでダイレクトメンバとして登録できない旨のエラーが生じる
権限付与途中でエラーにならず上記のtaro.yamada
になるケース
1、親グループ(parentGroupA)でtaro.yamada
に弱権限を付与(サブグループ(subGroupB)へ継承される)
2、サブグループ(subGroupB)でtaro.yamada
に強権限を付与
3、親グループ(parentGroupA)でtaro.yamada
に2で与えた権限よりもさらに高い権限を付与(サブグループ(subGroupB)へ継承される)
4、サブグループ(subGroupB)のメンバ一覧でtaro.yamada
がダイレクトメンバとして表示されなくなる
学び
ルールなしで無暗に権限やロールを直接付与するのはやめましょう。(数年前の私に送る言葉)
環境
GitLab CE v17.6.1