GCP/Apps Script

Apps Script로 Google Sheets의 비밀번호 설정하기

whistory 2023. 5. 23. 09:49
반응형

 

 

 

 

 

Google Sheets의 권한 관리는 존재하지만,

public으로 열어놓앗을 경우의 권한관리에는 어려움이 있다.

 

모든 사용자에게 Sheet를 수정 할 수 있는 권한을 주고

Google Sheets의 비밀번호를 설정해 비밀번호를 아는 사람들만 사용할 수 있도록 하고 싶다.

 

 

 

 

나만 볼수 있는, 별도의 Google Sheet에 비밀번호를 적어 놓았다.

 

다른 Google Sheets에서 password를 가져와, prompt를 통해 비밀번호를 입력 받는다.

function protectSheet () {
  // 비밀번호를 관리하는 시트
  const passwordSheetId     = "GOOLE_SHEET_ID";
  const passwordSheetName   = "password";
  const passwordSheetSheet  = SpreadsheetApp.openById(passwordSheetId).getSheetByName(passwordSheetName);
  // 비밀번호 추출
  const PASSWORD            = passwordSheetSheet.getRange("A1").getValue();

  const ui      = SpreadsheetApp.getUi();

  let pwd       = '';
  let btnState  = ui.Button.CANCEL;
  let result    = ui.prompt("비밀번호 확인", "비밀번호를 입력하세요.\n\n", ui.ButtonSet.OK);

  let button    = result.getSelectedButton();
  let input     = result.getResponseText();

  if ( button == ui.Button.OK && input == PASSWORD) {
    okMessage(ui);
  } else {
    while ( pwd != PASSWORD || btnState != ui.Button.OK ) {
      if ( pwd == PASSWORD ) {
        okMessage(ui);
        break;
      }
      let prmopt  = ui.prompt("비밀번호 확인", "비밀번호가 일치하지 않습니다.\n비밀번호를 다시 입력하세요.\n\n", ui.ButtonSet.OK);
      pwd         = prmopt.getResponseText();
      button      = prmopt.getSelectedButton();
    }
  }
}

function okMessage(ui) {
  ui.alert("Google Sheet 사용이 가능하십니다.");
}

 

 

위에서 만든 함수를

onOpen 트리거로 등록 시킨다.

 

 

 

 

 

Google Sheets 가 실행되었을때(열렸을때) 화면

 

 

 

 

 

위와 같이 코드를 작성하면

onOpen 트리거 실행 시 딜레이가 있기때문에 Apps Srcript에 접근이 가능해 관리자 sheet id 를 확인 할 수 있다.

 

그렇기떄문에, 다른 sheet의 password를 가져오는 부분을

다른 라이브러리로 빼면, password를 가지고 있는 sheet를 노출 시키지 않을 수 있다.

 

 

Apps Script 라이브러리 생성해서 다른 Apps Script에서 사용하기

💡 Apps Script 프로젝트를 진행함에 있어, 유지보수를 용이하기 위해서, 공통모듈을 라이브러리로 배포하여 사용하는 방법이다. Apps Script 라이브러리 생성해서 다른 Apps Script에서 사용하기 💡 App

whiseung.tistory.com

this Apps script

function protectSheet () {
  const PASSWORD = common.getPassword();
  console.log(PASSWORD);
}

 

common library

/**
 * password sheet에서 password 가져오기
 */
function getPassword() {
  // 비밀번호를 관리하는 시트
  const passwordSheetId     = "1BAOmHAwWi1ebf5O8Jw48QIqbauaqQr5t7tBMEAuDE5w";
  const passwordSheetName   = "password";
  const passwordSheetSheet  = SpreadsheetApp.openById(passwordSheetId).getSheetByName(passwordSheetName);
  // 비밀번호 추출
  return passwordSheetSheet.getRange("A1").getValue();
}

 

 

 

 

 

 

 

반응형