FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Swift SDKにおけるACLの設定方法

f:id:mbaasdevrel:20180806093819p:plain

Swift SDKのTipsです。ACLはデータをセキュアに、安全に利用する上で必須の機能になります。他のSDKと比べてSwift SDKでの設定方法が多少特徴的なので紹介します。

Swift SDKの導入法

Swift SDKはCocoaPods向けに提供しています。Xcodeで新しいiOSプロジェクトを作ったら、Podfileを用意します。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'todoapp' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for todoapp
  pod 'NCMB', :git => 'https://github.com/NIFCLOUD-mbaas/ncmb_swift.git'
end

そして pod install でSwift SDKをインストールします。

初期化について

現在、新規でiOSアプリを作成すると、InterfaceがSwiftUI、Life CycleがSwiftUI Appとなっています。この状態で作ると AppDelegate.swift はなく、 (アプリ名)App.swift というファイルが作られます。

この場合、まずSwift SDKを読み込みます。

import SwiftUI
import NCMB   // 追加

そして var body の上に @Environment を追加します。

@Environment(\.scenePhase) private var scenePhase // 追加
var body: some Scene {

最後に WindowGrouponChange を追加します。このonChangeの中で初期化処理を行います。

        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { scene in
            switch scene {
            case .active:
                NCMB.initialize(applicationKey: "YOUR_APPLICATION_KEY", clientKey: "YOUR_CLIENT_KEY")
            }
        }

これで利用可能になります。

ACLの新規作成

ACLを作成するコードは var acl = NCMBACL.empty です。

// ACLを作成
var acl = NCMBACL.empty

ACLを設定する

ACLは次の3種類があります。

  • 任意(未ログインユーザ含む)
  • 特定のユーザ
  • 特定のロール(グループ)

任意(未ログインユーザ含む)

任意の場合はキーとして * を指定します。そして読み込み権限 readable 、編集権限を writable で指定します。

acl.put(key: "*", readable: true, writable: true)

これは他のSDKでいうところの setPublicReadAccesssetPublicWriteAccess に相当します。

特定のユーザ

特定のユーザを指定する場合はキーとしてユーザのオブジェクトIDを指定します。他は任意の場合と同じです。

acl.put(key: user.objectId!, readable: true, writable: true)

これは他のSDKでいうところの setUserReadAccesssetUserWriteAccess に相当します。

特定のロール(グループ)

特定のロール(グループ)を指定する場合はキーとして role:(ロール名) という形で指定します。他は任意の場合と同じです。

// Adminロールに対して権限を設定する
acl.put(key: "role:Admin", readable: true, writable: false)

これは他のSDKでいうところの setRoleReadAccesssetRoleWriteAccess に相当します。

データストアに対してACLを設定する

データストアへACLを設定する場合は、NCMBObject のaclプロパティに対してACLを設定してください。

obj.acl = acl

ファイルストアに対してACLを設定する

ファイルストアの場合は初期化する際に設定します。

let file : NCMBFile = NCMBFile(fileName: "ncmb.txt", acl: acl)

まとめ

ACLを使いこなせばクエリ条件を指定せずに必要なデータだけを取得できるようになったり、各ユーザのデータを細かく管理できるようになります。ぜひ使いこなしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。