NIFCLOUD-mbaas / UserCommunity

ニフクラ mobile backend ユーザーコミュニティ
https://mbaas.nifcloud.com/
82 stars 18 forks source link

ACLを変更するには #1310

Open kakusato opened 2 years ago

kakusato commented 2 years ago

Unityで新規ユーザー作成時にACLを { "acl" : { "*" : { "read" : true } , "4suSlFT5xx" : { "read" : true , "write" : true } の様な設定にしたいのですがどうしたら良いですか? 読み込み権限を全開放ならできたのですが。

public void Signin ()
{
      //NCMBUserのインスタンス作成 
      NCMBUser user = new NCMBUser ();

      //全会員に対して
      //読み込み権限を全開放
      NCMBACL acl = new NCMBACL();
      acl.PublicReadAccess = true;
      user.ACL = acl;

      //ユーザ名とパスワードの設定
      user.UserName = UserName.text;
      user.Password = PassWord.text;

      //会員登録を行う
      user.SignUpAsync ((NCMBException e) => { 
          if (e != null) {
              UnityEngine.Debug.Log ("新規登録に失敗: " + e.ErrorMessage);
          } else {
              UnityEngine.Debug.Log ("新規登録に成功");
              SceneManager.LoadScene("LogOut");
          }
      });
}
goofmint commented 2 years ago

保存した後、更新するのではいかがでしょう?

user.SignUpAsync ((NCMBException e) => { 
          if (e != null) {
              UnityEngine.Debug.Log ("新規登録に失敗: " + e.ErrorMessage);
          } else {
              UnityEngine.Debug.Log ("新規登録に成功");
              SceneManager.LoadScene("LogOut");
              // ここでACL変更して更新
          }
      });
kakusato commented 2 years ago

具体的に教えて頂けませんか? ACL設定の書き方がよくわからなく。 以下の様にしてみましたが、反映されないようで。

public void Signin ()
{
    //NCMBUserのインスタンス作成 
    NCMBUser user = new NCMBUser ();

    //全会員に対して
    //読み込み権限を全開放
    //NCMBACL acl = new NCMBACL();
    //acl.PublicReadAccess = true;
    //user.ACL = acl;

    //ユーザ名とパスワードの設定
    user.UserName = UserName.text;
    user.Password = PassWord.text;
    user.Add("deviceUniqueIdentifier", SystemInfo.deviceUniqueIdentifier);

    //会員登録を行う
    user.SignUpAsync ((NCMBException e) => { 
        if (e != null) {
            UnityEngine.Debug.Log ("新規登録に失敗: " + e.ErrorMessage);
        } else {
            UnityEngine.Debug.Log ("新規登録に成功");

            SceneManager.LoadScene("LogOut");

            //全会員に対して
            //読み込み権限を全開放
            NCMBACL acl = new NCMBACL();
            acl.PublicReadAccess = true;
            user.ACL = acl;
        }
    });
}
goofmint commented 2 years ago

user.ACL = acl; した後、保存していないように見えます。後、ACLを上書きしているので、ユーザーに対する書き込み権限も必要かと思います。

https://mbaas.nifcloud.com/assets/sdk_doc/unity/Help/classNCMB_1_1NCMBACL.html#a1f6f18c32f105ff89ee62fc11c024cd3

kakusato commented 2 years ago

すみません。以下の様にしても 【StatusCode】:403が出てしまいますね。 【Error】:NCMB.NCMBException: No access with ACL.

//会員登録を行う
user.SignUpAsync ((NCMBException e) => { 
    if (e != null) {
        UnityEngine.Debug.Log ("新規登録に失敗: " + e.ErrorMessage);
    } else {
        UnityEngine.Debug.Log ("新規登録に成功");

        SceneManager.LoadScene("LogOut");

        //全会員に対して
        //読み込み権限を全開放
        NCMBACL acl = new NCMBACL();
        acl.PublicReadAccess = true;
        acl.SetReadAccess(user.ObjectId, true);
        acl.SetWriteAccess(user.ObjectId, true);
        user.ACL = acl;
        user.SaveAsync();

    }
})
goofmint commented 2 years ago

原因として考えられるのは、ユーザ登録しただけでは認証を通っていないからだと思われます。

となると、↓のような手順を踏む必要がありそうです。

  1. 会員登録
  2. ログイン(会員登録したユーザ名、パスワードで)
  3. ACL変更
kakusato commented 2 years ago

ご指導ありがとうございました。 以下の形で対応できました。

public void Login ()
{
    //NCMBUserのインスタンス作成 
    NCMBUser user = new NCMBUser ();

    // ユーザー名とパスワードでログイン
    NCMBUser.LogInAsync (UserName.text, PassWord.text, (NCMBException e) => {    
        if (e != null) {
            UnityEngine.Debug.Log ("ログインに失敗: " + e.ErrorMessage);
        } else {
            UnityEngine.Debug.Log ("ログインに成功!");

            //全会員に対して
            //読み込み権限を全開放
            NCMBUser currentUser = NCMBUser.CurrentUser;

            NCMBACL acl = new NCMBACL();
            acl.SetReadAccess(currentUser.ObjectId, true);
            acl.SetWriteAccess(currentUser.ObjectId, true);
            acl.PublicReadAccess = true;
            currentUser.ACL = acl;
            currentUser.SaveAsync();

            SceneManager.LoadScene("LogOut");
        }
    });
}

public void Signin ()
{
    //NCMBUserのインスタンス作成 
    NCMBUser user = new NCMBUser ();

    //ユーザ名とパスワードの設定
    user.UserName = UserName.text;
    user.Password = PassWord.text;

    //会員登録を行う
    user.SignUpAsync ((NCMBException e) => { 
        if (e != null) {
            UnityEngine.Debug.Log ("新規登録に失敗: " + e.ErrorMessage);
        } else {
            UnityEngine.Debug.Log ("新規登録に成功");
            Login();
        }
    });
}