Refre sh MySQL объект подключения при изменении привилегий для пользователя - PullRequest
0 голосов
/ 13 июля 2020

У меня есть объект подключения с именем пользователя: 'user' к БД в MySql, теперь я явно изменил некоторые привилегии пользователя для этого «пользователя», но это не влияет на существующие объекты подключения. Это изменение привилегии применимо только к новому объекту подключения.

Например: у меня есть объект подключения (conn) со всеми назначенными привилегиями, и теперь я изменил, скажем ( запись / чтение ) привилегия для того же объекта подключения (conn), но этот объект (conn) все еще может выполнять операции выбора / вставки .

Есть ли способ обновить sh объект подключения автоматически при изменении каких-либо привилегий для пользователя.

1 Ответ

0 голосов
/ 14 июля 2020

Я нашел для вас этот класс, он может помочь https://www.codota.com/code/java/methods/android.database.DataSetObservable/notifyChanged Но на вашем месте я бы не сохранил в объекте никакой информации, кроме, может быть, токена. Вы можете попробовать создать таблицы, в которых будет информация о пользователях, и проверить эту информацию в тот момент, когда вам нужно запустить какой-то метод только для привилегированных пользователей. В моем старом проекте я создаю следующие таблицы:

Таблица пользователей

Права доступа к таблицам

И создаю методы, которые проверяют access_right в такие функции, как панель администратора

Пример функции:

public class Blog extends Initialization {
   private boolean stop;
   private Statement st;
   private ResultSet rs;
   private String login;
   private BufferedReader reader;
   private BufferedWriter writer;

   Blog(Statement st, String login, BufferedReader reader, BufferedWriter writer) {
    this.st = st;
    this.login = login;
    this.reader = reader;
    this.writer = writer;
}
private void checkRightsToCallAdministrationPanel() {
    try {
        String access_rightsString = "";

        rs = st.executeQuery("SELECT access_id FROM users WHERE login='" + login + "';");
        while (rs.next()) {
            access_rightsString = rs.getString(1);
        }

        if (Integer.parseInt(access_rightsString) < 3) {
            callAdministrationPanel();
        } else {
            writer.write("No such variant\n");
            writer.flush();
        }
    } catch (IOException | SQLException e) {
        e.printStackTrace();
    }
  }
}
...