2017-01-06 10 views
0

Для проекта мы используем liferay и для обработки пользователей мы используем ldap.Удаление пользователя на liferay

Пользователь, удаленный из ldap, не обновляет базу данных liferay и, следовательно, если пользователь должен быть добавлен после его удаления, это вызывает проблему.

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

DELETE FROM Users_UserGroups WHERE userId = 'userid'; 
DELETE FROM Users_Roles WHERE userId = 'userid'; 
DELETE FROM Users_Orgs WHERE userId = 'userid'; 
DELETE FROM Contact_ WHERE userId = 'userid'; 
DELETE FROM Group_ WHERE classPK = 'userid'; 
DELETE FROM User_ WHERE userId = 'userid'; 

но программно, как мы можем это сделать.

Я попытался с помощью:

UserLocalServiceUtil.deleteUser(UserLocalServiceUtil 
         .getUserByEmailAddress(companyid, email)); 

но не работает должным образом. каковы другие способы сделать это?

+0

Какие ошибки вы столкнулись при использовании класса Service для удаления пользователя? Любые конкретные ссылки, оставленные в БД? –

+1

В процессе удаления пользователя - это двухэтапный процесс сначала деактивирует пользователя, а затем вы можете его удалить. – Gautam

+0

http://stackoverflow.com/questions/19022517/users-are-not-getting-deleted-from-liferay-db – Issamovitch

ответ

1

Получить электронную почту от пользователей, которые вы хотите удалить из таблицы User_. И вставьте его в ArrayList.

В моем случае я разместил этот код в образце программы и запустил этот код один раз.

`

List<User> users = UserLocalServiceUtil.getUsers(QueryUtil.ALL_POS, QueryUtil.ALL_POS); 
ArrayList<String> places = new ArrayList<String>(Arrays.asList("[email protected]","[email protected]")); 
for (User user : users) { 
    if (places.contains(user.getEmailAddress())) { 
     System.out.println("user "+user.getEmailAddress()+" deleted"); 
     UserLocalServiceUtil.deleteUser(user); 
    } 
} 

`

Надеется, что это помогает !!

+1

@Navankur Thats all the logic of logic. Используйте это .. 'Список users = UserLocalServiceUtil.getUsers (QueryUtil.ALL_POS, QueryUtil.ALL_POS); ArrayList places = new ArrayList <(Arrays.asList ("[email protected]", "[email protected]"); для пользователя (пользователь : users) { if (! places.contains (user.getEmailAddress())) { System.out.println ("user" + user.get EmailAddress() + "deleted"); UserLocalServiceUtil.deleteUser (пользователь); } } ' –

+0

У этого есть синтаксическая ошибка –

2

Несмотря на мой комментарий «пожалуйста, определите, что он не работает должным образом», я хотел бы дать ответ, который показывает альтернативу. Вместо того, чтобы дать вам решение слов вашего вопроса, это будет устранять основную проблему. Если вам нужен реальный ответ на слова вашего вопроса, пожалуйста, опишите, что вы наблюдаете.

Удаление пользователя является опасной операцией: вы можете оставить оборванные ссылки, например. если этот пользователь участвовал в некоторых мероприятиях в портлете. Они могут быть авторами сообщений в блогах, статьях содержания или сообщениях доски сообщений. И это не исчерпывающий список.

Therefor это всегда лучше просто отключить пользователя -. Таким образом, их имя, портретного изображения и другие данные всегда доступны даже долго после того, как они разрешают войти

+0

проблема, с которой я столкнулась, больше связана с созданием пользователей снова с тем же адресом электронной почты. когда я их воссоздаю, они импортируются в datbase liferay и не получают аутентификацию ... также это не показывает никаких журналов исключения и т. д., поэтому я не могу найти причину ... –

+0

Если вы уже вручную удалили строки из своей базы данных все ставки сделаны. Вы никогда не должны этого делать, потому что эта процедура api не распознает данные, которые они находят. –

+0

Да, я попытался удалить пользователей вручную из указанных таблиц. Итак, каковы варианты сейчас. –