Custom User Dataを利用してユーザーに管理者属性を追加しよう
管理者ユーザー用
カスタムデータの追加
先ほど作成した“custom_user_data”のコレクションに、ドキュメントを追加します。
- “CreationlineCluster”の管理画面から[Collections]を表示する
- sampleapp - custom_user_dataを開き、[INSERT DOCUMENT]ボタンをクリックする
- ダイアログが開くので、{ }のボタンをクリックする。_idの$oidには自動生成された値が指定された状態になっている
- テキストエリアに以下のjsonを入力して[Insert]をクリックする。$oidは変更しないこと
{ "_id": { "$oid": "<自動生成なので、ここは変更しないこと>" }, "user_id": "<コピーした ID をここに貼り付け>", "is_admin": true }
- 追加されたことを確認する
これで、管理者用のカスタムデータが追加できました。
アプリでのカスタムデータの利用
C#のプログラムでサインインユーザーのカスタムデータを取得し、管理者かどうかを判定して処理を分岐してみます。プログラムの変更はVisual Studio 2022を使用して行います。
プログラムの変更
アプリを改修して、サインインユーザーのカスタムデータが取得できることを確認します。前回のコードから引き続きになりますが、TopFragment.csのOnViewCreated関数に以下のコードを追加します。詳細はGitLabを参考にしてください。
// サインインユーザーの属性値 (カスタムデータ) を取得する。 BsonDocument customData = await app.CurrentUser.RefreshCustomDataAsync(); BsonValue isAdmin = customData?.GetValue("is_admin", false) ?? false; helloText.Text += (isAdmin.BsonType is BsonType.Boolean ? isAdmin.AsBoolean : false) switch { true => "\n管理者", false => "\n一般ユーザー" };
CurrentUser.RefreshCustomDataAsync関数を実行すれば、BsonDocumentクラスのオブジェクトとしてカスタムデータを取得できます。非同期関数でawaitしているので、呼び出し元のOnViewCreated関数にはasync修飾子を付加する必要があります。
特定のデータを取得するにはGetValue関数を使います。引数としてデータの名前(今回のコードでは“is_admin”)を指定します。
【参照】Custom User Data - .NET SDK
BSONドキュメントについて
BSONはバイナリフォーマットされたJSONで、MongoDBシステム内部での管理とネットワーク通信時に使用されます。よって、C#のコードでデータを受け取った時点では、このBSONというバイナリデータの状態になっています。
JSONはテキストなので人間基準で扱いやすく、解読も可能ですが、BSONだとそうは行きません。そこでMongoDB.Bsonのアセンブリに含まれるBsonDocumentクラスを使用して、 BSONのドキュメントを操作することになります。
【参照】JSON and BSON
【参照】Bson Reference
【参照】MongoDB.Bson
動作確認
[Ctrl]+[F5]キーを押下し、アプリを動かしてみます。Androidエミュレーターでアプリ起動後、作成したadmin@sampleapp.localユーザーでサインインします。以下の画面のように“管理者”と表示されればOKです。
試しに、管理者以外のユーザーでもサインインしてみましょう。例えば、user@sampleapp.localというユーザーを作ってカスタムデータを未登録の状態にした場合、以下のように“一般ユーザー”として判定されます。
おわりに
今回は、MongoDB Realmの機能であるCustom User Dataを使用して、特定のユーザーに“管理者”としての意味を持たせました。本例以外にも、その他さまざまな属性を追加することでユーザーに特別な意味を持たせることができるので、ぜひご活用ください。
次回は、アプリに管理者専用ページを追加し、そこから商品情報を登録/参照できるようにしていきます。お楽しみに!
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- MongoDB Realmのパーティションへの理解を深めよう
- サンプルプログラムで MongoDB Realm のデータ同期を確認する
- MongoDB Realmを利用したCRUD機能を実装しよう
- Visual StudioでXamarin+Realmアプリの開発環境をセットアップ
- 「Flexible Sync」でデータを同期してみよう
- Realmアプリの機能を利用して認証機能を作ろう(後編)
- Rancherのカスタムカタログの作成
- MongoDB Atlasクラスタの作成とMongoDB Realmアプリのデプロイ
- Realmアプリの機能を利用して認証機能を作ろう
- GitLabを用いた継続的インテグレーション