当前位置: 首页 > 知识库问答 >
问题:

如何将用户添加到角色中

宰父单弓
2023-03-14

我正试图在我的注册功能中为用户分配一个角色。

通过使用以下代码:

try {
    role.save(new CloudRoleCallback() {
    @Override
    public void done(CloudRole cloudRole, CloudException t) throws     CloudException {
        if(cloudRole != null){
            System.out.println("Adding user role"+ ""+   cloudRole.getRoleName());
            userObj.addToRole(role, new CloudUserCallback() {
                @Override
                public void done(CloudUser cloudUser, CloudException e) throws CloudException {
                    if(cloudUser != null){
                        System.out.println("role in role added successfully");
                        }
                    if(e != null){
                        e.printStackTrace();
                        }
                }
            });
        }
        if( t != null){
            t.printStackTrace();
                }
    }
});

} 
userObj.signUp(new CloudUserCallback() {
    @Override
    public void done(CloudUser cloudUser, CloudException e) throws  CloudException {
    if (cloudUser != null) {
        onSignupSuccess();
       }
    if (e != null) {
        e.printStackTrace();
        error = e.getMessage();
        error = error.substring(error.indexOf(""));
        onSignupFailed();
        progressDialog.dismiss();
        }
    }
});

当我试图运行上面的代码时,我得到了以下错误。

E/AndroidRuntime:致命异常:AsyncTask#2进程:info,pid:967 java.lang.runtimeException:在Android.os.AsyncTask$3处执行doInBackground()时发生错误。done(AsyncTask.java:300)在java.util.concurrent.futuretask.finishCompletion(FutureTask.java:355)在java.util.concurrent.futureTask.setException(FutureTask.java:222)在java:231)在java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExecutor.java:1112)在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:587)在java.lang.thread.run(ThreadPoolExecutor.java:818)在java.lang.thread.run(ThreadPoolExecutor.java:587),原因是:java.lang.nullPointerException:试图在(jsonObject.java:324)位于io.cloudboost.clouduser.addtocom.rakesh_kr.msrit_info.signup$signupclass$1的角色(clouduser.java:317)。done(signup.java:149)在io.cloudboost.cloudrole.save(cloudrole.java:83)在com.rakesh_kr.msrit_info.signup$signupclass.doinbackground(signup.java:144)在com.rakesh_kr.msrit_info.signup.doinbackground(signup.java:126)k.java:237)位于Android.os.asynctask$SerialExecutor$1.run(asynctask.java:231) 在java.util.concurrent.ThreadPoolExecutor.RunWorker(ThreadPoolExecutor.java:1112) 在java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:587) 在java.lang.thread.run处(thread.java:818)

共有1个答案

庄弘业
2023-03-14

@kr Rakesh您的调用顺序是错误的,您实际上是在对一个不存在的用户调用addtorole,因为您的user.signup是在序列的后面调用的。
您应该这样做:

  1. 注册
  2. 在注册回调的done方法中创建和保存角色
  3. 调用addtorole内部done方法的role.savecallback

下面是我提出的代码,所以您可以摘一片叶子:

            user.signUp(new CloudUserCallback() {

            @Override
            public void done(final CloudUser user1, CloudException e)
                    throws CloudException {
                if (e != null)
                    e.printStackTrace();
                else {
                    CloudRole role = new CloudRole(str);
                    role.save(new CloudRoleCallback() {

                        @Override
                        public void done(CloudRole x, CloudException t)
                                throws CloudException {
                            if (t != null)
                                t.printStackTrace();
                            else {
                                user1.addToRole(x, new CloudUserCallback() {

                                    @Override
                                    public void done(CloudUser user,
                                            CloudException e)
                                            throws CloudException {
                                        if (e != null)
                                            e.printStackTrace();
                                        else {
                                            System.out
                                                .println("user added to role");
                                        }

                                    }
                            });
                        }

                    }
                });
            }

        }
    });
 类似资料:
  • 我试图使用Keycloak rest API向特定用户添加客户端级别的角色。我在邮递员尝试这个,但不断得到404找不到。 https://{keycloak url}/auth/admin/realms/acme/users/b62dc517-0dd8-41ad-9d97-f385e507e279/role-mappings/clients/6b1f23b4-6bec-4873-a991-4b7e

  • 我希望能够运行以开始的命令!suspend,提到一个用户,然后确定一个时间长度,并在指定的时间长度内向提到的用户添加一个名为“suspend”的角色。 我不知道该怎么做,因为我对JDA太不熟悉,无法让它工作。除了实际添加的名为“暂停”的角色之外,我的一切都正常。

  • 我需要在Liferay的用户登录应用程序时为他们分配角色。 我已经实现了实现“身份验证器”的自定义类的“身份验证器”方法中的所有逻辑。 示例代码: 当我登录时,很明显它可以工作,我检查liferay数据库的表并更新它们,我的用户分配了“管理员”角色。但是,前端的门户不显示“Admin”选项。 但如果我转到“我的帐户”,按“保存”按钮,注销并再次登录,我有可用的管理选项。 有人知道为什么会这样吗?,

  • 我是新来的python和创建不和谐的机器人在一般情况下,我不能为我的生命弄清楚如何让我的机器人分配一个角色给用户的用户请求。 我在互联网上搜索了几个小时,找到了一些例子,但它们都产生了错误。 以下是我的命令代码: 以下是我得到的错误:

  • 问题内容: 我有一个运行着某些进程(uwsgi和celery)的docker容器。我想为这些进程以及它们都属于的工作组创建一个celery用户和uwsgi用户,以便分配权限。 我尝试将和添加到我的Dockerfile中,但这会引起问题,因为这些命令会提示您输入(我已在下面的构建中发布了响应)。 将用户添加到Docker容器以便为在该容器中运行的工作人员设置权限的最佳方法是什么? 我的Docker映

  • 我目前正在构建一个SPA类型的应用程序原型。第一步是用Laravel Passport实现一个API并保护它。为此,我从这个现有的结构中获得灵感: Laravel SPA。问题是,没有一个API URL是受保护的,这意味着,作为用户,我可以从API请求所有信息。 所以我决定从零开始,更加安全。我使用的是一个角色和权限包:Laravel permission。 这是我第一次实现和API,我一直坚持使