Redirect snc_internal users to the Service Portal in ServiceNow

Redirect snc_internal users to the Service Portal in ServiceNow

Below we highlight a method for redirecting users with only a "snc_internal" user role to the Service Portal, as out of the box users with Any role get directed to the UI 16 back end.

Start by opening up the Script Include SPEntryPage

Next, find the function getFirstPageURL and modify it similarly to below, you will need to find the Sys ID of the snc_internal role prior to doing this step.

getFirstPageURL: function() {
		var session = gs.getSession();
		this.logProperties('before', session);

		// has roles and is not a Service Portal page - go to UI16
		var nt = session.getProperty("nav_to");
		var isServicePortalURL = new GlideSPScriptable().isServicePortalURL(nt);
		var redirectURL = session.getProperty("login_redirect");

		// NEW - Check for users with only snc_internal role
		var SNCInternalUserRole = "debab85bff02110053ccffffffffffb6"; // Sys id of snc_internal role must be put here
		var SNCInternalRole = new GlideRecord("sys_user_has_role");
		SNCInternalRole.addQuery("user",gs.getUserID());
		var roleCount = 0;
		var hasSNCInternalRole = false;
		SNCInternalRole.query();
		while(SNCInternalRole.next()){
			roleCount++;
			if(SNCInternalRole.getValue("role") == SNCInternalUserRole){
				hasSNCInternalRole = true;
			}
		}
		var hasSNCInternalRoleOnly = (roleCount == 1 && hasSNCInternalRole);
		//
		
		if (user.hasRoles() && !hasApproverRoleOnly && !redirectURL && !isServicePortalURL)
			return;

		// user may have logged in from a frame, the /login_redirect.do page will bust out of it
		if (!redirectURL) {
			// redirectURL is nav_to 
			// if nav_to == "welcome.do" then use starting_page
			var sPage = session.getProperty("starting_page");
			if (sPage && nt == "welcome.do")
				nt = sPage;
			
			// Avoid a redirect loop to the home page
			var ep = gs.getProperty("glide.login.home");
			if (nt) {
				if (ep == nt)
					nt = null;
			}
			 // PRB726860: if page is still welcome.do, go to glide.login.home preserving frameset
			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");
		var returnUrl = this.portal;
		if (redirectURL && redirectURL != "true") {
			var spUrl = new GlideSPScriptable().mapUrlToSPUrl(redirectURL);
			returnUrl = spUrl ? this.portal + "?" + spUrl : redirectURL;
		}

		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;
	},

That's it! All users with no roles, or only the snc_internal role, should now get redirected to the Service Portal.