Name

global.KnowledgeAccessSNC

Description

Figures out access to manage Knowledge Bases Customers should not change this class directly This class is never called directly.

Script

var KnowledgeAccessSNC = Class.create();
KnowledgeAccessSNC.prototype = {

  initialize: function() {
  	this.knowledgeHelper = new SNC.KnowledgeHelper(); 
  },
  
  /**
   * Determine if a user has the right to access a knowledge base
   *
   * @param GlideRecord kb_knowledge_base or kb_knowledge
   *
   * @return boolean
   */
  managerRights: function(kb) {
  	if(!kb || gs.nil(kb))
  		return false;
  	
  	var owner, managers;
  	if(kb.getTableName() == "kb_knowledge" || kb.instanceOf("kb_knowledge")) {
  		owner = kb.kb_knowledge_base.owner;
  		managers = kb.kb_knowledge_base.kb_managers;
  	} else {
  		owner = kb.owner;
  		managers = kb.kb_managers;
  	}

  	// user has knowledge_admin role
  	if(this.knowledgeHelper.isAdminUser(kb))
  		return true;
  	
  	// user has manager role and is knowledge base owner
  	if(gs.hasRole("knowledge_manager") && owner == gs.getUserID()) 
  		return true;
  	
  	// user is listed in knowledge base manager list
  	if(JSUtil.notNil(managers) && managers.indexOf(gs.getUserID()) != -1)
  		return true;

  	return false;
  },

  /**
   * Determine if a user has the right to access kb_category record
   *
   * @param String kbCategoryId
   *
   * @return boolean
   */
  managerRightToKnowledgeCategory: function(kbCategoryId) {
  	var rootId = this.knowledgeHelper.getRootKBId(kbCategoryId);

  	var kbKnowledgeBase = new GlideRecord("kb_knowledge_base");
  	kbKnowledgeBase.get(rootId);
  	
      return this.managerRights(kbKnowledgeBase);
  },
  
  /**
   * Determine if a user is a contributor of a knowledge base
   *
   * @param GlideRecord kb_knowledge_base or kb_knowledge
   *
   * @return boolean
   */
  contributorRight: function(kb) {
  	if (kb.getTableName() == "kb_knowledge" || kb.getTableName() == "kb_knowledge_base" || kb.instanceOf("kb_knowledge")) {
  	    return this.knowledgeHelper.canContribute(kb);
  	}
  	
  	return false;
  },

  /**
  * Determines if the user can read the article or knowledge base
  *
  * @param GlideRecord kb_knowledge or kb_knowledge_base
  *
  * @return boolean
  */
  canReadArticle: function(kb) {
  	if (kb.getTableName() == "kb_knowledge" || kb.getTableName() == "kb_knowledge_base" || kb.instanceOf("kb_knowledge")) {
  		return this.knowledgeHelper.canRead(kb);
      }

  	return false;
  },
  
  /**
  * Determines if a given knowledge category has children(categories or articles) or is empty
  *
  * @param String sys_id of a kb_category record
  *
  * @return boolean
  */
  isEmptyCategory: function(kbCategoryId) {
  	var kbKnowledge = new GlideRecord("kb_knowledge");
  	var category = new GlideRecord("kb_category");
  	
  	// Check for any child categories or related knowledge articles
  	if (kbKnowledge.get("kb_category", kbCategoryId) || category.get("parent_id", kbCategoryId))
  		return false;
  	
  	return true;
  },
  
  
  type: 'KnowledgeAccessSNC'
};

Sys ID

8403647bb712230026778d78ee11a93f

Offical Documentation

Official Docs: