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

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

Swift × iOS SDKでTodoアプリを作る(ACLを付ける)

f:id:mbaasdevrel:20180806093819p:plain

前回まででTodoアプリのバックエンドをmBaaSに置き換えました。しかし、このままではデータが誰でも閲覧できたり、編集や削除できる状態です。自分のデータをセキュアに管理するためにはACL(アクセス制限)を設ける必要があります。

ACLを設ける場合には、ユーザとしてログインしている必要がありますが、IDやパスワードの設定は面倒です。そこで使えるのが匿名認証です。今回は匿名認証を用いてデータを簡単にセキュアにする方法を紹介します。

管理画面での設定

まず、管理画面で匿名認証を有効にする必要があります。有効にしていないと下記のようなエラーメッセージが出てしまいます。

Optional(Error Domain=com.nifty.cloud.mb Code=403005 "anonymous must not be entered." UserInfo={NSLocalizedDescription=anonymous must not be entered.})

匿名認証の実装

実装は簡単です。まずすでにログインしているかどうかを取得します。これは NCMBUser.current() で取得できます。この返り値が nil でない場合はログインできていますので匿名認証を行う必要がありません。

NCMB.setApplicationKey(keys.applicationKey , clientKey: keys.clientKey)
let currentUser = NCMBUser.current()
if currentUser != nil {
  return true
}

匿名認証は NCMBAnonymousUtils.logIn で行います。

NCMBAnonymousUtils.logIn { (user, error) in
  if error != nil {
    print ("Log in failed")
    print (error)
  } else {
    print("Logged in")
  }
}

ログインできれば、後はデータの取得を行う際には自動的にACL情報を付与してくれます。

データの保存

データを保存する際にはACL情報を設定します。具体的には NCMBACL.init() を実行し、そのACL情報に対して acl.setReadAccess(true, for: NCMBUser.current()) などでユーザ情報を紐付けます。そして NCMBObjectacl メソッドに対して作成したACLオブジェクトを設定します。

let acl = NCMBACL.init()
acl.setPublicReadAccess(false)
acl.setPublicWriteAccess(false)
acl.setReadAccess(true, for: NCMBUser.current())
acl.setWriteAccess(true, for: NCMBUser.current())

let obj = NCMBObject(className: "todoClass")
obj?.acl = acl

これで保存を行うとACL情報が設定されたデータが保存されます。

f:id:mbaasdevrel:20180808134354p:plain

まとめ

匿名認証を使うことでユーザはIDやパスワードを設定する手間がなくなります。ぜひご利用ください!

中津川 篤司

中津川 篤司

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