질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

문서 열람 페이지인지 확이하는 코드를 구현하는데

 

마지막에 문제가 걸리는 부분이 

 

$oDocument->isExists() 를 만족하지만 

권한이 없는 접근자의 경우 막아주지 않으면 문제가 생기는 경우 이부분까지 막아줘야 하는데요.

 

디버그를 찍어보니 

$oDocument->grant_cache 이 정확하게 열람 권한자가 진입하면 1(true)가 찍히고 

권한 없는 자가 접근해서 접근권한 없다는 메시지를 만나게 되면 값이 없어집니다.

 

해당 모듈의 권한까지 조회해서 비로그인인 접근자가 권한이 있는 문서인지 확인하는 것 보다 이게 효율이 더 높은지 아니면 사용하면 안되는 건지 궁금합니다.

 

그리고 XE에서도 가지는 값인가요?

  • profile

    가능하면 내부 자료 구조에 의존하지 말고 공식 제공하는 함수를 사용하시기 바랍니다. grant_cache는 $oDocument->isGranted(), $oDocument->isAccessible() 등의 함수에서 내부적으로 사용하는 변수로 기억합니다. 이름 그대로 권한과 관련된 일부 데이터를 캐싱하는 용도이지만, 모듈의 접근 권한까지 체크하지는 않을 수도 있습니다. 데이터가 캐싱되기 전에 그 변수를 사용하면 엉뚱한 값이 나올 가능성도 있고요.

  • profile profile
    네. 가급적 직접 모듈 권한까지 체크하는거로 해야겠네요.
    타임라인 같은 곳에서는 이미 진입을 했기에 원하는 값을 얻지 못할 수도 있을 것 같긴 합니다.(이때는 값을 못받아도 상관은 없지만요. 게시글로 진입했는지 아닌지만 확인하는 거라...)
  • profile profile
    그리고 저 값이 관리권한자 한테 주어지는 값이라 제가 의도했던 값도 아니네요. 열람 권한이 아닌것 같네요. 테스트 계정이 최고관리 계정이다보니 오해 했네요.
  • profile profile
    열람 권한은 isAccessible()을 확인해 보세요.
  • profile profile
    $oDocument->isAccessible() 값은 권한이 없어서 권한 없다고 메시지가 뜨는데도 값을 가지더라구요.
  • profile profile
    음 그렇군요. 글 자체의 권한만 확인하고 모듈 권한 체크하는 코드가 없네요. isGranted()도 마찬가지고요. 게시판 자체의 접근 권한은 게시판에서 체크한다고 가정하고 만들어졌나 봅니다.
  • profile profile

    네. 그냥 모듈에 권한 조회한 다음 현재 접근자 신분으로 권한있는지 조회하는 방식으로 그냥 사용해야겠습니다.

  • profile profile

    타임라인 모듈이 하위 모듈에서 설정된 권한에 의존되지 못하고 전부 열람 되어 버리는 문제가 이런 문제였고 타임라인 자체 버그가 아니라 수정하려다고 수정을 못하고 마무리가 된게 아닌가 하네요. 아마도 라이믹스 2.0 통합게시판에서도 같은 현상이 나타날 겁니다.(문서 자체의 비밀글은 체크가 바로 되기에 이건 통합게시판에서도 동일하게 차단 작동하죠.)

    덕분에 제가 최근에 애드온으로 문서의 원래 모듈의 권한을 체크해서 리턴 시키는 작업으로 회피했는데요.
    애드온이 계속 필요하지 않을 수 있다면 좋겠지만....

  • profile profile

    접근 권한이 서로 다른 게시판들을 묶어서 타임라인으로 보여주는 것부터가 좀 레어한 방식이라...

     

    글읽기 시도시 원본 게시판의 권한 체크 정도는 타임라인에서도 가능하지 않을까 합니다. 어차피 그 정보 다 가져와서 주물러서 처리하도록 되어 있으니까요.

     

    더 깔끔하게 아예 목록에도 나오지 않도록 하려면 좀더 복잡하겠지요. 타임라인에서 유저의 권한에 따라 일부 게시판을 제외하고 (즉, 관리자가 설정한 게시판의 집합과 유저가 접근할 수 있는 게시판의 집합의 교집합을 구해서) 불러오는 식으로 구현해야 할 텐데, 이렇게 수시로 목록이 달라진다면 캐싱 효율이 떨어지겠지요.

  • profile profile

    일부를 제외하는게 가장 좋은 선택이긴 하지만 모든 권한이 있는 대부분의 회원들을 위해 통합게시판에 포함시키려는게 운영자가 선택하게 되는 현실이죠. 권한 없는 게시글이 열람되는걸 모르는 운영자도 많을 겁니다.

    뭐 최근에는 애드온 개발이 가능해서 애드온으로 권한 없는 게시글은 차단하고 있으니 문제는 없습니다.

     

    네. 말씀하신 타임라인 모듈에서 가능합니다. 제가 애드온으로 제작했으니까요....

  • profile
    웹지기님은 이제 고수 개발자이시네요!