Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ニコニコ漫画と認可

fusagiko
September 29, 2020

 ニコニコ漫画と認可

Gotanda.rb#46 "管理画面/権限" https://gotanda-rb.connpass.com/event/187557/ にて発表した内容です。

fusagiko

September 29, 2020
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 • 名前:フサギコ • Twitter :fusagiko • GitHub :takayamaki •

    本名 :髙﨑 尚人 • 主な分野:Ruby(Rails), Terraform(AWS) • 他に :TypeScript, React, Ansible • Ruby:2.1.2~ • 大学院生の時に修士論文用のシミュレータを Pure Rubyフルスクラッチで書いたのが最初 • 趣味:アイドルマスター • 全作品、それぞれ楽しんでるタイプ
  2. 自己紹介(OSS活動) • マストドン • 本家(tootsuite/mastodon)コントリビュータ • 2年弱PR送れてないけどまだcommit数37位らしい • imastodon.net構築、運用、管理人 •

    アイドルマスターのファン向け非公式マストドン • 2017年4月開設 • アカウント数4817、アクティブ数500/週程度 • 本家に独自改造が入っている • 完全に袂を分かったわけではないのでVariety(変種)と自称 • 追従は遅れ気味…
  3. 自己紹介(仕事) • ~ 2016/3 工学院大学大学院 • 修士(工学) 修論:情報指向ネットワーク • 2016/4~2017/7

    NHN テコラス株式会社 • 2017/8~2019/6 株式会社ドワンゴ • friends.nico • ドワンゴ公式マストドン (サービス終了) • N Air • ニコニコ生放送向け 配信ソフト • 2019/7~現在 株式会社トリスタ • 読書メーター • 読書愛好家コミュニティサイト • ニコニコ漫画 • UGC/PGC漫画連載プラットフォーム
  4. 自己紹介(仕事) • ~ 2016/3 工学院大学大学院 • 修士(工学) 修論:情報指向ネットワーク • 2016/4~2017/7

    NHN テコラス株式会社 • 2017/8~2019/6 株式会社ドワンゴ • friends.nico • ドワンゴ公式マストドン (サービス終了) • N Air • ニコニコ生放送向け 配信ソフト • 2019/7~現在 株式会社トリスタ • 読書メーター • 読書愛好家コミュニティサイト • ニコニコ漫画 • UGC/PGC漫画連載プラットフォーム
  5. 認証と認可 認証 authentication 認可 authorization “それ”が誰であるかを 確かめること to prove that

    something is real “それ”に許可を 与えること to give permission for something
  6. 認証と認可 認可 しない する 認 証 し な い 何もわからないし

    何もさせない 誰であるかは 自己申告を信じ、 操作を許可する す る それが誰かわかるが、 何もさせない それが誰かを識別し、 誰であるかによって 操作を許可する
  7. CanCanCan • ユーザを中心に、何へどのアクションを認可するか DSL的に記述 • can 【アクション】, 【対象】, 【各種条件】 •

    対象にはActive Record継承したClassも指定できる • クエリインターフェイスに統合した形で使えて便利 • Active Recordに関係ない対象はシンボルで表現 • can? 【アクション】, 【対象】で判定 • => Boolean • 対象がActive Recordモデルの場合 • Article.accessible_by(current_ability) とかできる
  8. Pundit • 認可系gemとしてはおそらくもっとも有名か • モデルを中心に、誰にどのアクションを 認可するか記述 • ActiveRecordモデルに対する操作タイミングで認 可を行う •

    複雑になってきたRailsアプリケーションではモ デルとコントローラが一対一ではなくなりがち • コントローラごとに認可条件を変えたい場合詰む
  9. どの認可系gemも使わなかった • 現行PHPとDBを共有しながらの順次リプレイス • 現行が不完全なレベルベースの認可 • モデルと必要権限が一対一で対応しない • 特定カラムの更新だけ上位権限が要る場合がある •

    アクションメソッドと必要権限も対応しない • 「このカラムの更新には上位権限が要る」といった知識を BFFに流出させてはならない • バルク(一括)操作がある • 唯一可能性があったのはCanCanCanだが… • どう考えても大規模になるのでメンテしづらそう • ユーザの権限情報のDB上の表現からCanCanCanの DSLに落とし込める確信が持てなかった
  10. まとめ • ニコニコ漫画の現行はモノリシックなPHP • ビジネスロジックのRails APIモードへのリプレイスが進行中 • 現行PHPはBFF的立ち位置に寄せていく • 認証と認可の定義

    • ニコニコ漫画では公式連載の原稿納入、公開期間設定などが認可の 対象 • Rubyの権限管理系gem 3種概観 • 検討した結果、いずれも使わなかった • ニコニコ漫画の認可機構はどのように実装をしているか • 無料公開期間の作成を例とした具体的流れ • 判定基準が同じアクションは判定を移譲している • 多数あるIDの種類をどうやって区別しているか • 今後の課題 • ユーザがINDEXできるものだけINDEXする機能