i would like to certain groups like desktop support support itil to access sow and not native ui

chercm
Mega Sage

i would like to certain groups like desktop support support itil to access sow and not native ui , how it can be done ?

15 REPLIES 15

@jcmings is does look correct ? 

 

/**
*
* Service Portal sample script include to indicate
* 1. which login page should be used
* 2. the starting page after the user is authenticated
*
* Script is configured using system properties

* PROPERTY VALUE
* glide.entry.page.script new SPEntryPage().getLoginURL();
* glide.entry.first.page.script new SPEntryPage().getFirstPageURL();
*
* functions can return a path or null if no overrides are necessary
*
**/
var SPEntryPage = Class.create();

SPEntryPage.prototype = {

initialize: function() {
this.logVariables = false; // for debugging
this.portal = this.getDefaultPortal(); // The URL suffix for default portal
},

/***
*
* Fetch the default portal suffix
*
**/
getDefaultPortal: function() {
var gr = new GlideRecord("sp_portal");
gr.addQuery("default", true);
gr.query();
if (gr.next())
return "/" + gr.getValue("url_suffix") + "/";

return "/esc/";
},

/***
*
* Referred to by property: glide.entry.page.script
*
**/
getLoginURL: function() {
var session = gs.getSession();
var nt = session.getProperty("nav_to");
var sPage = session.getProperty("starting_page");
if (nt == "welcome.do")
session.clearProperty("nav_to");

if (!sPage && !nt)
session.putProperty("starting_page", gs.getProperty("glide.login.home"));

var portalGR = new GlideRecord("sp_portal");
portalGR.addQuery("url_suffix", this.portal.replace(/\//g, ""));
portalGR.addNotNullQuery("login_page");
portalGR.query();
if (portalGR.next())
return this.portal + "?id=" + portalGR.login_page.id;

return this.portal + "?id=login";
},

/***
*
* Referred to by property: glide.entry.first.page.script
*
**/
getFirstPageURL: function() {
var session = gs.getSession();

// ======= START: Custom redirect for restricted users to SOW =======
var currentUser = gs.getUserID();

// Replace these with actual sys_ids of the restricted groups
var restrictedGroups = [
'REPLACE_WITH_GROUP_SYS_ID_1',
'REPLACE_WITH_GROUP_SYS_ID_2'
];

var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('user', currentUser);
grMember.addQuery('group', 'IN', restrictedGroups.join(','));
grMember.setLimit(1);
grMember.query();

if (grMember.hasNext()) {
return '/now/workspace/service-operations/';
}
// ======= END: Custom redirect for restricted users to SOW =======

this.logProperties('before', session);

var nt = session.getProperty("nav_to");
var isServicePortalURL = new GlideSPScriptable().isServicePortalURL(nt);
var redirectURL = session.getProperty("login_redirect");

if (user.hasRoles() && !redirectURL && !isServicePortalURL)
return;

if (!redirectURL) {
var sPage = session.getProperty("starting_page");
if (sPage && nt == "welcome.do")
nt = sPage;

var ep = gs.getProperty("glide.login.home");
if (nt) {
if (ep == nt)
nt = null;
}

if (nt == "welcome.do") {
session.putProperty("nav_to", ep);
return;
}

session.putProperty("login_redirect", nt || "true");
return "/login_redirect.do?sysparm_stack=no";
}

session.clearProperty("login_redirect");
session.clearProperty("nav_to");

if (redirectURL && redirectURL.indexOf("sys_attachment.do") > -1)
return redirectURL;

var returnUrl = this.portal;
if (redirectURL && redirectURL != "true") {
var spUrl = new GlideSPScriptable().mapUrlToSPUrl(redirectURL);
returnUrl = spUrl ? this.portal + "?" + spUrl : redirectURL;
if (!user.hasRoles() && !spUrl && redirectURL.indexOf("home_splash.do") > -1)
returnUrl = this.portal;
}

this.logProperties('after', session);

if (!this.logVariables) {
gs.log('redirectURL: ' + redirectURL);
gs.log('User: ' + user.getName());
gs.log('is internal: ' + (!user.hasRoles()));
gs.log('returnUrl: ' + returnUrl);
}

return returnUrl;
},

logProperties: function(beforeOrAfter, session) {
if (!this.logVariables)
return;

gs.log('SPEntryPage: Redirect ------------------------------- ' + beforeOrAfter);
gs.log('session.starting_page: ' + session.getProperty("starting_page"));
gs.log('session.nav_to: ' + session.getProperty("nav_to"));
gs.log('session.login_redirect: ' + session.getProperty("login_redirect"));
gs.log('gs.fURI: ' + session.getURI());
},

type: 'SPEntryPage'
};

 

 

any one can comment?

I believe when we'd modified that in the script we did something like if (gs.getUser().isMemberOf('group'), redirect. Your method may work too. Have you tested it? There are likely multiple posts on SPEntryPage online. 

@jcmings  is it something like this : 

 

var session = gs.getSession();

// ======= START: Simple group-based redirect using isMemberOf =======
if (gs.getUser().isMemberOf('your_group_name_here')) {
return '/now/workspace/service-operations/';
}
// ======= END =======

@chercm It looks like users have found success using role-based redirection rather than groups. That's not to say that groups wouldn't work, but check out this community post where someone describes using roles. KB0746730 also outlines this with a YouTube video.