如果我在定义了许多用户角色的ServiceNow实例上进行开发,并且没有很多关于角色提供的功能的文档。
有没有办法检查 SNOW 实例并确定角色为最终用户提供的功能,即使在业务或 UI 规则定义与角色相关的逻辑的情况下也是如此?
这可以通过后端脚本可靠地完成吗?
这在文档方面或编程方式上并不是非常简单。
主要选项是在sys_security_acl_role
表中查询角色并列出相关的 ACL。
此外,大多数 ACL 没有适当的描述,如果没有与 ACL 关联的角色,高级条件也会要求您阅读这些描述。
您需要查看 ACL 的name
和operation
,以了解它们授予的访问权限。
可以作为后台脚本运行的示例
var role = 'itil'; // role to check
// query the ACLs with the role related
var gr = GlideRecord('sys_security_acl_role');
gr.addQuery('sys_user_role.name', role);
gr.query();
while (gr.next()) {
// only show active ACLs
if (gr.sys_security_acl.active) {
gs.print(gr.sys_security_acl.name + " (" + gr.sys_security_acl.operation + ") - " + gr.sys_security_acl.description);
}
}
输出取决于您的实例,但这就是想法。
new_call (create) - Allow create for records in new_call, for users with role itil.
ngbsm_view (create) - Allow create for records in ngbsm_view, for users with roles (itil, ecmdb_admin).
...etc...
你可以检查这个代码可能使用
function getUserGroups(user_sys_id) {
var theUser = gs.getUser();
theUser = theUser.getUserByID(user_sys_id);
return theUser.getMyGroups();
}
也检查一下这个
function setGroupFilter(){
var user = current.variables.user_name;
//Reset the filter query
current_groupsg_filter.reset();
var answer = 'sys_idINjavascript:getMyGroups()';
current_groupsg_filter.setQuery(answer);
current_groupsacRequest(null);
//if remove reqeust display slushbucket
if (addYN=="remove"){
g_form.setDisplay('current_groups', true);
}
}