2016-12-08 13 views
2

на основе официальной wiki page, запись Критерии Пользователя может содержать определенный набор пользователей, групп, роли, отделов ....Как проверить, принадлежит ли пользователь некоторым критериям пользователя на стороне сервера?

Моего вопрос, я должен сделать ручную проверку для пользователя от пользовательских критериев , что-то вроде:

  1. проверить, если пользователь существует в пользовательских критериях списка пользователей
  2. тогда, если предыдущий тест не удался, проверьте, если роль пользователя существует в пользовательских критериях списка ролей
  3. затем, если предыдущий тест не пройден , проверьте департаменты .... и так далее

Или есть что-то из снега, которое выполняет эти проверки для меня? Я предполагаю, что должен быть какой-то способ, но я не могу найти любую вещь, соответствующую в официальной вики или документы

ответ

1

Так что есть встроенная функция, которая получает идентификаторы всех пользовательских критериев записей, доступных для текущего вошедшего в систему пользователя:

SNC.UserCriteriaLoader.getAllUserCriteria()

выше функция возвращает объект типа ArrayList<String>, так вы можете проверить соответствие критериев целевого пользователя на этом объекте: SNC.UserCriteriaLoader.getAllUserCriteria().contains(user_criteria_sys_id)

Это решило мою проблему, как бы я все еще не знал, есть ли Ома общий метод, который принимает идентификатор пользователя в качестве параметра

+0

спасибо, я так долго искал это. Как вы получили эту информацию? Я не нашел никакой документации по этому поводу ... – makim

+0

hi @makim, мне посчастливилось, что чак томаси увидел мой вопрос на официальном форуме и ответил на него, вот ссылка https://community.servicenow.com/thread/246758 –

0

Я считаю, что вы ищете, Совпадение Все флажок, взглянуть на документацию по http://wiki.servicenow.com/index.php?title=User_Criteria#Matching_All

Если вы снимите флажок этот флажок, он проверяет, что пользователь соответствует любому раздела критериев.

Если вы проверить эту коробку, она требует все критерии, которые будут совпавшие.

Пример 1 - совпадение является не-проверено

enter image description here

В этом примере совпадение является не-проверено и если пользователь удовлетворяет любому из следующие критерии являются частью этих критериев пользователя.

User in role: Asset 
or 
User in company: ACME EMEA 
or 
User in department: Development 

Пример 2 - Match Все является проверено

enter image description here

В этом примере Match All является проверяемого и пользователь должен выполнить все в следующем c Они являются частью этих Критерии пользователя.

User in role: Asset 
and 
User in company: ACME EMEA 
and 
User in department: Development 
+0

Спасибо за ваш ответ, но я спрашивал, существует ли уже программный способ/функция для оценки того, принадлежит ли какой-либо пользователь к некоторым пользовательским критериям, например sth, например 'checkUserCriteria (userId, userCriteriaId)', эта функция будет проверять этот флажок, который вы упомянули, и другие поля (роли, отпечатки, группы) и возвращает мне логическое значение, я нашел одну BTW 'SNC.UserCriteriaLoader.getAllUserCriteria()', которая возвращает массив идентификаторов пользовательских критериев, доступных для текущего входа в систему user –

+0

Что вы пытаетесь сделать с этим, кажется, что пользовательские критерии применяются только к существующей сессии, а не к членству в ней. Ваш единственный вариант - выполнить ручную проверку кода, например, в вашем вопросе. – Kirk

+0

на самом деле 'SNC.UserCriteriaLoader.getAllUserCriteria()' было достаточно для меня, но я собирался написать общий, который принимает идентификатор пользователя в качестве ввода, но похоже, что в снегу нет подобной вещи, поддерживаемой в снегу. –

0

Помимо SNC.UserCriteriaLoader.getAllUserCriteria() существует более общий метод:

SNC.UserCriteriaLoader.getUserCriteria(userId)

кажется вернуть список совпадающих критерии пользователя (ArrayList<String>) для указанного пользователя. Например.

SNC.UserCriteriaLoader.getUserCriteria(gs.getUserID())

и

SNC.UserCriteriaLoader.getAllUserCriteria()

возвращают тот же результат.

+0

hi lurii, этот метод не был доступен в то время, когда я задал вопрос, я проверю его на версию Jakarta и даю вам отзывы, спасибо –

+0

он не работает в Джакарте или Стамбуле :(это дает мне это сообщение об ошибке, когда я пытаюсь выполнить его из сценария исправления «Имя недопустимого поля JoinQuery: user_criteria» –

+0

@AbdoAdel Я протестировал его, и вы были правы, это не сработает, если вы используете его встроенным. Однако он должен работать нормально, если вы сломаете он в 2 оператора: var userId = gs.getUserId() и SNC.UserCriteriaLoader.getUserCriteria (userId). Пожалуйста, дайте мне знать, если это сработает для вас, и я обновлю свой ответ. –