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

社内CSサービスを支える権限管理について

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for hukurou hukurou
April 06, 2021

 社内CSサービスを支える権限管理について

Mercari CS/CRE Tech Talk #1

Avatar for hukurou

hukurou

April 06, 2021
Tweet

Other Decks in Technology

Transcript

  1. 4 権限管理のマイクロサービス CS tool MOD tool Contact tool Authz tool

    CS tool その他CS tool 機能 お問い合せ 返信機能 MOD機能 権限管理機能
  2. 5 なぜAuthzを作っているか 権限管理の仕組みが初期の頃からあまり変わっていない • RBAC(Role-based access control)っぽい方式 ◦ Roleで付与できる権限を制限 ◦

    Roleに許可されている権限の中で、必要な権限を適宜追加 旧CSToolの権限管理 メンバー 管理者 権限 権限 ロール 権限
  3. 7 • サーバーサイド ◦ Go ◦ gqlgen • フロントエンド ◦

    TypeScript ◦ React ◦ @apollo/client ▪ GraphQL client ◦ graphql-codegen ▪ GraphQL Schemaから型定義を生成するツール ◦ Graphql-tag ▪ GraphQL queryをパースしてくれるリテラルを提供してくれる Authzの開発
  4. 10 Graphqlでの権限管理 Custom directiveを定義しschemaに権限情報を付与 directive @hasPermission(permission: [String!]!) on FIELD_DEFINITION Query

    { itemCase(id: ID!): ItemCase @hasPermission(permission: [“case:read”]) } type ItemCase { id: ID! name: String! item: Item! @hasPermission(permission: ["item:read"]) } Schemaのイメージ :
  5. 11 処理の流れ admin-graphql backend frontend Authz backend ①Gatewayで認証し tokenを取得 ②

    middlewareで Tokenを使って ユーザー情報を取得 ③ “case:read”の権限を 持っていることを確認 ④ 権限を持っているので resolverで処理 query ItemCase{ itemCase(id: 1) { id name } } { permissions: [“case:read”] }
  6. 12 処理の流れ admin-graphql backend frontend Authz backend ①Gatewayで認証し tokenを取得 ②

    middlewareで Tokenを使って ユーザー情報を取得 ⑤ "item:read"の権限を 持っていないので Permission Denied ④ ItemCaseの Resolverを処理 query ItemCase{ itemCase(id: 1) { id  item{ id } } } { permissions: [“case:read”] } ③ “case:read”の権限を 持っていることを確認