Как я проверил уровень полномочий пользователя в Java - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть таблица SQL, в которой хранятся пользователь, пароль и роль / уровень полномочий пользователя, Admins = 5, обычные пользователи = 1.Прямо сейчас я не уверен, как передать информацию, которую я получил от моего метода getUserRole, в обработчик событий входа в систему, так как это метод Int, и вы не можете вернуть ему переменную логического типа из int, или есть лучшийспособ переделать код, чтобы сделать его проще?

Метод входа в систему

public boolean isLogin(String user, String pass) throws Exception{
        PreparedStatement pr = null;
        ResultSet rs = null;

        String sql = "SELECT * FROM Login where username = ? and password = ?";

        try{
            pr = this.connection.prepareStatement(sql);
            pr.setString(1, user);
            pr.setString(2, pass);

            rs = pr.executeQuery();

             if(rs.next()){
                 rs.getInt("role");


             return true;   
            }
            return false;
        }
        catch(SQLException ex){
            return false;
        }

        finally{
                pr.close();
                rs.close();
        }

    }

Получить метод авторизации пользователя

public int getUserRole(String user) throws Exception
    {
     PreparedStatement pr = null;
     ResultSet rs = null;

     String sql = "SELECT * FROM Login WHERE username = ? AND role = ?";
     try
     {
         pr = this.connection.prepareStatement(sql);
         pr.setString(1, user);


         if(rs.next())
         {
             int role = rs.getInt("role");
             return role;
         }
         else{
             return 0;
         }
     }
     catch(SQLException ex)
     {
         return 0;
     }

     finally
     {
     pr.close();
     rs.close();
     }


    }

И, наконец, контроллер,обработчик события входа в систему

@FXML
    public void Login (ActionEvent event){
        try{
            if(this.loginModel.isLogin(this.username.getText(), this.password.getText())){
                Stage stage = (Stage) this.login.getScene().getWindow();
                stage.close();


                if(this.loginModel.getUserRole(this.username.getText()))//error is here,
 cant get username as its a boolean type and not int
        }
      }
catch (Exception localException)
         {
             this.loginStatus.setText("The username or password entered is incorrect. Please check and try again.");
         }
    }

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

вне всех этих открытых пустых вещей вы можете определить глобальную переменную (int и т. Д.);)

, и вы можете изменить эту переменную "глобально" внутри метода

0 голосов
/ 16 апреля 2019

Аутентификация и авторизация должны состоять из двух отдельных шагов.Это означает, что логин не должен беспокоиться о получении роли.Вместо этого, когда пользователь пытается получить доступ к ресурсу, это время, чтобы проверить, разрешает ли роль пользователя доступ к ресурсу.

После более внимательного изучения вашего кода кажется, что вы делаете это ивозникли проблемы с if условием.Вам необходимо определить, какое значение int присваивается каждой роли.В частности, какое значение означает, что пользователь является «администратором»?Когда вы знаете это значение, вам нужно сделать сравнение с ==.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...