|
224 | 224 |
|
225 | 225 | - > 処理概要 |
226 | 226 |
|
227 | | - 画面表示時に、weko_accounts.admin.ShibSettingView.index メソッドを GET で呼び出して、instance.cfg または weko-accounts で以下のコンフィグから Shibboleth の許可設定を読み込む。 |
| 227 | + 画面表示時に、weko_accounts.admin.ShibSettingView.index 関数を GET で呼び出して、instance.cfg または weko-accounts で以下のコンフィグから Shibboleth の許可設定を読み込む。 |
228 | 228 |
|
229 | 229 | 両方で設定されている場合、instance.cfg の設定が優先される。また、画面で設定を変更した場合は、その変更が最優先される。 |
230 | 230 |
|
|
236 | 236 |
|
237 | 237 | - 設定キー:WEKO_ACCOUNTS_SHIB_LOGIN_ENABLED |
238 | 238 |
|
239 | | - [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index メソッドを POST で呼び出して、以下のようにしてコンテキストに設定を保存する。 |
| 239 | + [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index 関数を POST で呼び出して、以下のようにしてコンテキストに設定を保存する。 |
240 | 240 |
|
241 | 241 | > \_app = LocalProxy(lambda: current_app.extensions\['weko-admin'\].app) |
242 | 242 | > |
|
305 | 305 |
|
306 | 306 | 取得した[o]属性が[機関の'organizationName']と一致したら[機関内]と判定することができる。 |
307 | 307 |
|
308 | | - - [保存(Save)]ボタンを押すと、設定内容を保存し、以下のメッセージを画面上部に表示する。 |
309 | | - JP:「デフォルトロール設定を更新しました」 |
310 | | - EN:「Updated Default Role settings」 |
| 308 | + - [保存(Save)]ボタンを押すと、設定内容を保存し、以下のメッセージを画面上部に表示する。 |
| 309 | + |
| 310 | + (例:学認 IdP のロールを更新した場合) |
| 311 | + JP:「学認 IdP のロール設定を更新しました」 |
| 312 | + EN:「Gakunin Role was updated.」 |
311 | 313 |
|
312 | 314 | - > 関連モジュール |
313 | 315 |
|
314 | 316 | - weko_accounts |
315 | 317 |
|
316 | 318 | - > 処理概要 |
317 | 319 |
|
318 | | - 画面表示時に weko_accounts.admin.ShibSettingView.index メソッドを GET で呼び出して、weko-accounts で以下のコンフィグからデフォルトロール設定を読み込む。 |
| 320 | + ログイン時に、weko_accounts.views.\_adjust_shib_admin_DB 関数で admin_settings テーブルを設定ファイルの内容で新規作成、もしくは更新する。 |
319 | 321 |
|
320 | 322 | また、画面で設定を変更した場合は、その変更が最優先される。 |
321 | 323 |
|
322 | 324 | - パス(config.py): (暫定) |
323 | 325 | <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L110-L116> |
324 | 326 |
|
325 | | - - 設定キー:WEKO_ACCOUNTS_GAKUNIN_ROLE, WEKO_ACCOUNTS_ORTHROS_INSIDE_ROLE, |
326 | | - WEKO_ACCOUNTS_ORTHROS_OUTSIDE_ROLE, WEKO_ACCOUNTS_OTHERS_ROLE |
327 | | - |
328 | | - ※ [学認 IdP]の処理のみ記載 |
| 327 | + - 設定キー:WEKO_ACCOUNTS_GAKUNIN_ROLE, WEKO_ACCOUNTS_ORTHROS_OUTSIDE_ROLE, WEKO_ACCOUNTS_EXTRA_ROLE |
329 | 328 |
|
330 | | - > if current_app.config['WEKO_ACCOUNTS_GAKUNIN_ROLE']: |
| 329 | + > if AdminSettings.query.filter_by(name='default_role_settings').first() is None: |
| 330 | + > |
| 331 | + > new_setting = AdminSettings( |
| 332 | + > |
| 333 | + > id=8, |
| 334 | + > |
| 335 | + > name="default_role_settings", |
| 336 | + > |
| 337 | + > settings={ |
| 338 | + > |
| 339 | + > "gakunin_role": \_app.config['WEKO_ACCOUNTS_GAKUNIN_ROLE']['defaultRole'], |
| 340 | + > |
| 341 | + > "orthros_outside_role": \_app.config['WEKO_ACCOUNTS_ORTHROS_OUTSIDE_ROLE']['defaultRole'], |
| 342 | + > |
| 343 | + > "extra_role": \_app.config['WEKO_ACCOUNTS_EXTRA_ROLE']['defaultRole']} |
| 344 | + > |
| 345 | + > ) |
| 346 | + > |
| 347 | + > db.session.add(new_setting) |
| 348 | + > |
| 349 | + > db.session.commit() |
| 350 | + > |
| 351 | + > else: |
| 352 | + > |
| 353 | + > setting = AdminSettings.query.filter_by(name='default_role_settings').first() |
| 354 | + > |
| 355 | + > setting.settings = { |
| 356 | + > |
| 357 | + > "gakunin_role": \_app.config['WEKO_ACCOUNTS_GAKUNIN_ROLE']['defaultRole'], |
331 | 358 | > |
332 | | - > gakunin_role = current_app.config['WEKO_ACCOUNTS_GAKUNIN_ROLE'] |
| 359 | + > "orthros_outside_role": \_app.config['WEKO_ACCOUNTS_ORTHROS_OUTSIDE_ROLE']['defaultRole'], |
| 360 | + > |
| 361 | + > "extra_role": \_app.config['WEKO_ACCOUNTS_EXTRA_ROLE']['defaultRole']} |
| 362 | + > |
| 363 | + > db.session.commit() |
333 | 364 |
|
334 | | - 選択肢の一覧はコンフィグから読み込んで HTML で生成する。 |
| 365 | + 選択肢の一覧はコンフィグから読み込んで weko_accounts.shibuser.createDefaultRoleSettingArea 関数 で生成する。 |
335 | 366 |
|
336 | 367 | - パス(config.py): (暫定) |
337 | 368 | <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L121-L144> |
|
342 | 373 |
|
343 | 374 | > role_list = current_app.config['WEKO_ACCOUNTS_ROLE_LIST'] |
344 | 375 |
|
345 | | - - shibuser.html |
346 | | - > const defaultRoleList = document.getElementById('default-role-list').getAttribute('data-value'); |
347 | | - > |
348 | | - > const gakuninRoleList = document.getElementById('gakunin-role-list'); |
349 | | - > |
350 | | - > gakuninRoleList.appendChild(createSelectList(0, 'role', gakuninRoleList.getAttribute('data-value'))); |
351 | | - > |
352 | | - > ※ createSelectList() 選択肢を作成するメソッド |
| 376 | + [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index 関数で、以下のようにして admin_settings テーブルに設定を保存する。 |
| 377 | + |
| 378 | + - 最初に roles を宣言する(GET,POST 関わらず) |
353 | 379 |
|
354 | | - [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index メソッドを POST で呼び出して、以下のようにしてコンテキストに設定を保存する。 |
| 380 | + > default_roles = AdminSettings.get('default_role_settings', dict_to_object=False) |
| 381 | + > |
| 382 | + > roles = { |
| 383 | + > |
| 384 | + > 'gakunin_role': default_roles.get('gakunin_role', current_app.config['WEKO_ACCOUNTS_GAKUNIN_ROLE']['defaultRole']), |
| 385 | + > |
| 386 | + > 'orthros_outside_role': default_roles.get('orthros_outside_role', current_app.config['WEKO_ACCOUNTS_ORTHROS_OUTSIDE_ROLE']['defaultRole']), |
| 387 | + > |
| 388 | + > 'extra_role': default_roles.get('extra_role', current_app.config['WEKO_ACCOUNTS_EXTRA_ROLE']['defaultRole']) |
| 389 | + > |
| 390 | + > } |
355 | 391 |
|
356 | | - - ※ [学認 IdP]の処理のみ記載 |
357 | | - > new_gakunin_role = request.form.get('roleLists0', '0') |
| 392 | + - POST で更新する |
| 393 | + > for key in roles: |
358 | 394 | > |
359 | | - > if gakunin_role != new_gakunin_role: |
| 395 | + > if roles[key] != new_roles[key]: |
360 | 396 | > |
361 | | - > gakunin_role = new_gakunin_role |
| 397 | + > roles[key] = new_roles[key] |
362 | 398 | > |
363 | | - > \_app.config['WEKO_ACCOUNTS_GAKUNIN_ROLE'] = new_gakunin_role |
| 399 | + > flash(_(f'{key.replace("_", " ").title()} was updated.'), category='success') |
364 | 400 | > |
365 | | - > flash(\_('Gakunin IdP role was updated.'), category='success') |
| 401 | + > AdminSettings.update('default_role_settings', roles) |
366 | 402 |
|
367 | 403 | ### Shibboleth 属性と WEKO3 属性値のマッピング操作 |
368 | 404 |
|
|
384 | 420 |
|
385 | 421 | - 選択肢からマッピングしたい属性値を設定する。 |
386 | 422 |
|
387 | | - - [保存(Save)]ボタンを押すと、設定内容を保存し、以下のメッセージを画面上部に表示する。 |
388 | | - JP:「属性マッピング設定を更新しました」 |
389 | | - EN:「Updated Attribute Mapping settings」 |
| 423 | + - [保存(Save)]ボタンを押すと、設定内容を保存し、以下のメッセージを画面上部に表示する。 |
| 424 | + |
| 425 | + (例:shib_eppn を更新した場合) |
| 426 | + JP:「属性マッピング設定(shib_eppn)を更新しました」 |
| 427 | + EN:「Shibboleth Eppn mapping was updated.」 |
390 | 428 |
|
391 | 429 | - > 関連モジュール |
392 | 430 |
|
393 | 431 | - weko_accounts |
394 | 432 |
|
395 | 433 | - > 処理概要 |
396 | 434 |
|
397 | | - 画面表示時に、weko_accounts.admin.ShibSettingView.index メソッドを GET で呼び出して、weko-accounts で以下のコンフィグから WEKO3 属性のマッピング設定を読み込む。 |
| 435 | + ログイン時に、weko_accounts.views.\_adjust_shib_admin_DB 関数で admin_settings テーブルを設定ファイルの内容で新規作成、もしくは更新する。 |
398 | 436 |
|
399 | 437 | また、画面で設定を変更した場合は、その変更が最優先される。 |
400 | 438 |
|
|
403 | 441 |
|
404 | 442 | - > 設定キー:WEKO_ACCOUNTS_ATTRIBUTE_MAP |
405 | 443 |
|
406 | | - > if current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']: |
| 444 | + > if AdminSettings.query.filter_by(name='attribute_mapping').first() is None: |
| 445 | + > |
| 446 | + > new_setting = AdminSettings(id=9, name="attribute_mapping", settings=\_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']) |
| 447 | + > |
| 448 | + > db.session.add(new_setting) |
| 449 | + > |
| 450 | + > db.session.commit() |
407 | 451 | > |
408 | | - > weko_eppn_value = current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_eppn'] |
| 452 | + > else: |
409 | 453 | > |
410 | | - > weko_role_authority_name_value = current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_role_authority_name'] |
| 454 | + > setting = AdminSettings.query.filter_by(name='attribute_mapping').first() |
411 | 455 | > |
412 | | - > weko_mail_value = current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_mail'] |
| 456 | + > setting.settings = \_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP'] |
413 | 457 | > |
414 | | - > weko_user_name_value = current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_user_name'] |
| 458 | + > db.session.commit() |
415 | 459 |
|
416 | | - 選択肢の一覧はコンフィグから読み込んで HTML で生成する。 |
| 460 | + 選択肢の一覧はコンフィグから読み込んで weko_accounts.shibuser.createAttrMapSettingArea 関数 で生成する。 |
417 | 461 |
|
418 | 462 | - > パス(config.py): (暫定) |
419 | 463 | > <https://github.com/RCOSDP/weko/blob/v0.9.22/modules/weko-accounts/weko_accounts/config.py#L85-L100> |
420 | 464 |
|
421 | 465 | - > 設定キー:WEKO_ACCOUNTS_ATTRIBUTE_LIST |
422 | 466 |
|
423 | 467 | - admin.py |
| 468 | + |
424 | 469 | > role_list = current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_LIST'] |
425 | | - - shibuser.html |
426 | | - > const defaultAttrList = document.getElementById('default-attr-list').getAttribute('data-value'); |
427 | | - > |
428 | | - > const eppnAttrList = document.getElementById('eppn-attr-list'); |
429 | | - > |
430 | | - > eppnAttrList.appendChild(createSelectList(0, 'attr', eppnAttrList.getAttribute('data-value'))); |
431 | | - > |
432 | | - > ※ createSelectList() 選択肢を作成するメソッド(デフォルトロール選択肢作成と同一) |
433 | 470 |
|
434 | | - [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index メソッドを POST で呼び出して、以下のようにしてコンテキストに設定を保存する。 |
| 471 | + [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index 関数で、以下のようにして admin_settings テーブルに設定を保存する。 |
435 | 472 |
|
436 | | - - ※ [shib_eppn] 部分の処理のみ記載 |
| 473 | + - 最初に attributes を宣言する(GET,POST 関わらず) |
437 | 474 |
|
438 | | - > if weko_eppn_value != new_weko_eppn_value: |
| 475 | + > attribute_mappings = AdminSettings.get('attribute_mapping', dict_to_object=False) |
| 476 | + > |
| 477 | + > attributes = { |
| 478 | + > |
| 479 | + > 'shib_eppn': attribute_mappings.get('shib_eppn', current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_eppn']), |
| 480 | + > |
| 481 | + > 'shib_role_authority_name': attribute_mappings.get('shib_role_authority_name', current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_role_authority_name']), |
| 482 | + > |
| 483 | + > 'shib_mail': attribute_mappings.get('shib_mail', current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_mail']), |
439 | 484 | > |
440 | | - > weko_eppn_value = new_weko_eppn_value |
| 485 | + > 'shib_user_name': attribute_mappings.get('shib_user_name', current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_user_name']) |
441 | 486 | > |
442 | | - > with current_app.app_context(): |
| 487 | + > } |
| 488 | +
|
| 489 | + - POST で更新する |
| 490 | + > for key in attributes: |
| 491 | + > |
| 492 | + > if attributes[key] != new_attributes[key]: |
443 | 493 | > |
444 | | - > current_app.config['WEKO_ACCOUNTS_ATTRIBUTE_MAP']['shib_eppn'] = |
| 494 | + > attributes[key] = new_attributes[key] |
445 | 495 | > |
446 | | - > new_weko_eppn_value |
| 496 | + > flash(_(f'{key.replace("_", " ").title()} mapping was updated.'), category='success') |
447 | 497 | > |
448 | | - > flash(\_('shib_eppn mapping was updated.'), category='success') |
| 498 | + > AdminSettings.update('attribute_mapping', attributes) |
449 | 499 |
|
450 | 500 | 属性マッピングは Invenio コマンドでも更新出来るようにする。 |
451 | 501 |
|
452 | | - weko-accounts/cli.py に属性マッピングを更新するメソッドを作成する。 |
| 502 | + weko-admin/cli.py に update_attribute_mapping 関数を作成。 |
453 | 503 |
|
454 | 504 | マッピングを変更したい属性名(shib_eppn や shib_mail など)と、マッピングしたい属性値('eduPersonPrincipalName'や'mail'など)をコマンド送信することで更新を行う。 |
455 | 505 |
|
456 | 506 | - コマンド例 |
457 | | - > invenio update-attribute-mapping --shib_eppn 'eduPersonPrincipalName' --shib_mail 'mail' |
| 507 | + > invenio admin_settings mapping_update --shib_eppn 'eduPersonPrincipalName' --shib_mail 'mail' |
458 | 508 |
|
459 | 509 | ### ブロックユーザーの管理 |
460 | 510 |
|
|
481 | 531 |
|
482 | 532 | - > 処理概要 |
483 | 533 |
|
484 | | - - ブロックユーザーの ePPN 管理は admin_settings テーブルで行う。<br> |
485 | | - ※ 初回のみ、テーブルにレコードを追加する手順が必要となる。 |
| 534 | + - ブロックユーザーの ePPN 管理は admin_settings テーブルで行う。 |
486 | 535 |
|
487 | | - - レコードの内容 |
488 | | - > id: 6(連番)<br> |
489 | | - > name: blocked_user_settings<br> |
490 | | - > settings: {"blocked_ePPNs": []} |
491 | | - - populate-instance.sh の create-admin-settings-begin 付近に以下文を追加する。 |
492 | | - > ${INVENIO_WEB_INSTANCE} admin_settings create_settings \ |
493 | | - > 6 "blocked_user_settings" \ |
494 | | - > "{'blocked_ePPNs': []}" |
| 536 | + - レコードがない場合、ログイン時に weko_accounts.views.\_adjust_shib_admin_DB 関数で admin_settings テーブルを設定ファイルの内容で新規作成する。 |
| 537 | + |
| 538 | + > if AdminSettings.query.filter_by(name='blocked_user_settings').first() is None: |
| 539 | + > |
| 540 | + > new_setting = AdminSettings( |
| 541 | + > |
| 542 | + > id=6, |
| 543 | + > |
| 544 | + > name="blocked_user_settings", |
| 545 | + > |
| 546 | + > settings={"blocked_ePPNs": []} |
| 547 | + > |
| 548 | + > ) |
| 549 | + > |
| 550 | + > db.session.add(new_setting) |
| 551 | + > |
| 552 | + > db.session.commit() |
495 | 553 |
|
496 | 554 | - システム管理者、およびリポジトリ管理者はブロックしたいユーザーの ePPN を settings.blocked_ePPNs に追加する。<br> |
497 | 555 |
|
|
531 | 589 | > |
532 | 590 | > } |
533 | 591 |
|
534 | | - - [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index メソッドを POST で呼び出して、以下のようにしてテーブルを更新する。 |
| 592 | + - [保存(Save)]ボタンを押すと、weko_accounts.admin.ShibSettingView.index 関数を POST で呼び出して、以下のようにしてテーブルを更新する。 |
535 | 593 |
|
536 | | - > new_block_user_list = request.form.get('block-eppn-option-list', '0') |
537 | | - > |
538 | | - > if block_user_list != new_block_user_list: |
539 | | - > |
540 | | - > new_eppn_list = json.loads(new_block_user_list) |
541 | | - > |
542 | | - > new_eppn_list.sort() |
543 | | - > |
544 | | - > updateSettings = {'blocked_ePPNs': new_eppn_list} |
545 | | - > |
546 | | - > AdminSettings.update('blocked_user_settings', updateSettings) |
547 | | - > |
548 | | - > flash(\_('Blocked user list was updated.'), category='success') |
549 | | - > |
550 | | - > block_user_list = json.dumps(new_eppn_list) |
| 594 | + > new_block_user_list = request.form.get('block-eppn-option-list', '0') |
| 595 | + > |
| 596 | + > if block_user_list != new_block_user_list: |
| 597 | + > |
| 598 | + > new_eppn_list = json.loads(new_block_user_list) |
| 599 | + > |
| 600 | + > new_eppn_list.sort() |
| 601 | + > |
| 602 | + > updateSettings = {'blocked_ePPNs': new_eppn_list} |
| 603 | + > |
| 604 | + > AdminSettings.update('blocked_user_settings', updateSettings) |
| 605 | + > |
| 606 | + > flash(\_('Blocked user list was updated.'), category='success') |
| 607 | + > |
| 608 | + > block_user_list = str(new_eppn_list).replace('"', '\\"') |
551 | 609 |
|
552 | 610 | <!-- end list --> |
553 | 611 |
|
|
571 | 629 | </tr> |
572 | 630 | <tr class="even"> |
573 | 631 | <td><blockquote> |
574 | | -<p>2025/02/-</p> |
| 632 | +<p>2025/03/-</p> |
575 | 633 | </blockquote></td> |
576 | 634 | <td></td> |
577 | | -<td>Shibboleth 管理画面を追加</td> |
| 635 | +<td>Shibboleth 管理画面の機能を追加</td> |
578 | 636 | </tr> |
579 | 637 | </tbody> |
580 | 638 | </table> |
0 commit comments