Skip to content

[GRDM-62315, 60282] mAP core グループ権限の対応漏れ / タイトルが長いプロジェクトでワークフローを開始できない の修正 - #776

Draft
yacchin1205 wants to merge 3 commits into
RCOSDP:developfrom
yacchin1205:fix/group-perms-list-annotation
Draft

[GRDM-62315, 60282] mAP core グループ権限の対応漏れ / タイトルが長いプロジェクトでワークフローを開始できない の修正#776
yacchin1205 wants to merge 3 commits into
RCOSDP:developfrom
yacchin1205:fix/group-perms-list-annotation

Conversation

@yacchin1205

@yacchin1205 yacchin1205 commented Aug 18, 2026

Copy link
Copy Markdown

Purpose

mAP core グループ(#692)はノードの権限グループ(node_<id>_admin/write/read)に紐づき、対応する権限レベルの Contributor と同等の権限を与える設計ですが、この設計が反映されていない箇所が2つ残っており、本PRで対応します。あわせて、同じくワークフローの開始を妨げる別の不具合(タイトルが長いプロジェクトで開始に失敗する)も修正します。

ノード一覧 API の current_user_permissions がグループの権限を反映しない

グループを通じてプロジェクトの権限を持つユーザーの場合、ノード詳細 API の current_user_permissions には権限が正しく反映されますが、一覧 API(users/me/nodes/ など)では空になります。このため、一覧 API の値を参照するクライアント(OASys のプロジェクト選択画面)では、ユーザーが write 権限を持つプロジェクトであっても権限なしとして扱われます。

原因は、一覧 API が権限の算出に使う optimize_node_queryset の annotation が、Django auth グループへの直接所属(osfuser_groups)だけを見ており、mAP core のメンバーシップ(osf_mapcore_user_group → osf_mapcore_node_group)を辿っていないためです。ノード単体の判定(has_permission / get_permissions)は対応済みで、一覧だけが未対応でした。

workflow アドオンのアクセス判定がグループの権限を反映しない

グループ経由で権限を持つユーザーが workflow アドオンを使うと、ワークフローテンプレートの参照・開始に関わる API がいずれも 404 を返します。OASys ではプロジェクトを選択できるのに、ワークフローを開始できません。

原因は、テンプレート取得 _get_template_or_404 / エンジン取得 _get_engine_or_404 / テンプレート一覧 get_user_accessible_templates の 3 箇所が Contributor かどうかで判定しており、グループの権限を考慮していないためです。

タイトルが長いプロジェクトでワークフローを開始できない

ワークフロー開始時に発行する委任トークン(ApiOAuth2PersonalToken)の名前を「Workflow delegation: ()」の形式で組み立てており、label にはプロジェクトタイトルを含む文字列が入ります。name カラムの max_length=100 を超えるとバリデーションエラーになるため、タイトルが長いプロジェクトではワークフローの開始に失敗します。

Changes

  • api/nodes/utils.py
    • annotation の判定条件に mAP core のメンバーシップを辿る条件を OR で追加し、詳細 API(get_permissions)と同じ結果を返すようにする(groups アドオンが無効なノードは対象外のまま)
  • addons/workflow(views.py / services.py)
    • 上記 3 箇所の判定を「Contributor またはグループのメンバーとして、そのノードの権限を持っているか」に置き換え。ノード単体の判定には is_contributor_or_group_member を、複数ノードにまたがる判定には get_nodes_for_user(include_mapcore_groups=True) を使用
  • addons/workflow/token.py
    • トークン名を max_length=100 に収まるように切り詰める build_token_name を追加し、委任トークンの発行時に使用
  • テスト追加
    • api_tests/users/views/test_user_nodes_mapcore_group_permissions.py(新規1件): 一覧 API の current_user_permissions が詳細 API と一致すること(修正前のコードでは失敗する)
    • addons/workflow/tests/test_template_access.py(新規8件): アクセス判定が誰を許可し、誰を拒否するかをテストとして固定
    • addons/workflow/tests/test_token.py(新規7件): トークン名が境界値・日本語ラベルを含めて 100 文字に収まることを確認

QA Notes

  • データマイグレーションはありません
  • 権限判定コードに触れる変更です。判定にはいずれも OSF の既存関数を使っており、新たに許可されるのは「グループのメンバーとして当該ノードの権限を持つユーザー」だけです。親プロジェクト管理者の暗黙の閲覧権限は従来どおり判定に含まれず、テンプレートの visibility(project / institution / public)による公開制御も従来どおりです。許可・拒否の境界は上記のテストで固定しています
  • OASys 側の E2E に、グループ経由で権限を持つユーザーがプロジェクト選択からワークフローの開始・送信・完了確認までを行うシナリオを追加し、本修正を含む構成で全シナリオが成功することを確認済みです(一覧 API と詳細 API の権限一致の確認ステップを含む)

Documentation

None

Side Effects

  • mAP core グループのメンバーが、同じ権限レベルの Contributor と同様に、workflow のテンプレート参照・ワークフロー開始を行えるようになります(本PRの意図した変更です)
  • 一覧 API の current_user_permissions にグループ由来の権限が反映されるようになります(同上)
  • 委任トークンの表示名が 100 文字を超える場合に末尾が「...」で切り詰められます(表示のみで、トークンの機能には影響しません)

Ticket

  • GRDM-62315
  • GRDM-60282

@yacchin1205 yacchin1205 changed the title [GRDM-62315] mAP core グループ権限の対応漏れを修正(ノード一覧API・workflowアドオン) [GRDM-62315, 60282] mAP core グループ権限の対応漏れを修正 / タイトルが長いプロジェクトでワークフローを開始できない Aug 18, 2026
@yacchin1205 yacchin1205 changed the title [GRDM-62315, 60282] mAP core グループ権限の対応漏れを修正 / タイトルが長いプロジェクトでワークフローを開始できない [GRDM-62315, 60282] mAP core グループ権限の対応漏れ / タイトルが長いプロジェクトでワークフローを開始できない の修正 Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant