- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2022 08:53 AM
Hi everyone,
I need to give users in different departments access to specific companies. Usually this is achieved by adding that company to the user profile.
Considering the permissions often change - either because there are new companies or due to a specific company being assigned to another department, I question if it is possible to make these changes by creating roles for each department?
This way I would just need to change the role and all the users with that role would gain/lose access, instead of having to manually assign/remove companies from 300 user profiles.
Thanks in advance for your help.
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2022 09:23 AM
Hi,
You can write a business rule to run when a role is added to user, then add the required company to user profile.
Business rule on sys_user_has_role table
Condition : After Insert
Script :
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', current.user);
gr.query();
if(gr.next())
{
if(current.role == 'sysid of role 1')
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("sysid of group1"); //sysid of group you wanted to add for role 1
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
else if(current.role == 'sysid of role 2')
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("sysid of group2"); //sysid of group you wanted to add for role 2
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
}
Mark as correct and helpful if it solved your query.
Regards,
Sumanth

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2022 09:23 AM
Hi,
You can write a business rule to run when a role is added to user, then add the required company to user profile.
Business rule on sys_user_has_role table
Condition : After Insert
Script :
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', current.user);
gr.query();
if(gr.next())
{
if(current.role == 'sysid of role 1')
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("sysid of group1"); //sysid of group you wanted to add for role 1
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
else if(current.role == 'sysid of role 2')
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("sysid of group2"); //sysid of group you wanted to add for role 2
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
}
Mark as correct and helpful if it solved your query.
Regards,
Sumanth
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2022 10:42 AM
Hi Sumanth,
Thanks for helping.
I'm getting an error when trying to save the script: (Could not save record because of a compile error: JavaScript parse error at line (12) column (47) problem = missing ) after argument list (<refname>; line 12)) (it refers to the "gr.setValue" line).
Could you please clarify further, I'm not sure I understood where to place the name of the companies to add:
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', current.user);
gr.query();
if(gr.next())
{
if(current.role == '5f6f9e8697f0d150fb39b1c3f153af7e') // I copied the role sysid here
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("e46e38b197b09150fb39b1c3f153afb4"); //sysid of group you wanted to add for role 1
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
else if(current.role == 'b916005b1be81910203b5354604bcb94') // I copied the role sysid here
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("5186b2ca9734d150fb39b1c3f153afa6"); //sysid of group you wanted to add for role 2
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
}
Cheers,
Filipe
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2022 10:50 AM
Hi Sumanth,
Thanks for helping.
I'm getting an error when trying to save the script: (Could not save record because of a compile error: JavaScript parse error at line (12) column (47) problem = missing ) after argument list (<refname>; line 12)) (it refers to the "gr.setValue" line).
Could you please clarify further, I'm not sure I understood where to place the name of the companies to add:
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id', current.user);
gr.query();
if(gr.next())
{
if(current.role == '5f6f9e8697f0d150fb39b1c3f153af7e') // I copied the role sysid here
{
var listArr = gr.u_company.toString().split('company1','company2')//give company field backend name
listArr.push("e46e38b197b09150fb39b1c3f153afb4"); //sysid of group you wanted to add for role 1
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
else if(current.role == 'b916005b1be81910203b5354604bcb94') // I copied the role sysid here
{
var listArr = gr.u_company.toString().split(',');//give company field backend name
listArr.push("5186b2ca9734d150fb39b1c3f153afa6"); //sysid of group you wanted to add for role 2
gr.setValue('u_company', listArr.join(','); //give company field backend name
gr.update();
}
}
Cheers,
Filipe
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-22-2022 03:25 AM
Hi Sumanth,
Thank you so much for your help!
I found the error, there were 2 ")" missing.
Additionally I made the script check to see if the company is already in the list, to avoid duplicates.
Final code, should anyone require a similar business rule:
var gr = new GlideRecord('sys_user');
var listArr = [];
var checkArr = [];
gr.addQuery('sys_id', current.user);
gr.query();
if(gr.next())
{
if(current.role == 'sysid of role 1') //sysid of role 1
{
listArr = gr.u_companies.toString().split(',');//give company field backend name
checkArr = gr.u_companies;
if (!checkArr.includes('sysid of company1')){
listArr.push('sysid of company1'); //sysid of company you wanted to add for role 1
gr.setValue('u_companies', listArr.join(',')); //give company field backend name
gr.update();
}
}
else if(current.role == 'sysid of role 2') //sysid of role 2
{
listArr = gr.u_companies.toString().split(',');//give company field backend name
checkArr = gr.u_companies;
if (!checkArr.includes('sysid of company2')){
listArr.push('sysid of company2'); //sysid of company you wanted to add for role 2
gr.setValue('u_companies', listArr.join(',')); //give company field backend name
gr.update();
}
}
}
Thanks again for your help.
Cheers,
Filipe