Power Apps – SharePoint 행 수준 보안(parseJSON 사용)

Power Apps에서 SharePoint를 사용할 때 가장 큰 단점 중 하나는 행 수준 보안이 부족하다는 것입니다. 나는 무엇을 의미합니까? SharePoint에는 3가지 보안 수준만 있습니다.
  • 전체 읽기 및 쓰기
  • 전체 읽기 전용
  • 사용자가 만든 행 읽기 및 쓰기

  • 충분히 들리겠지만 여러 사람이 특정 행(예: 특정 팀 또는 직무)에 액세스하기를 원하면 어떻게 됩니까? 그렇다면 훌륭하지만 프리미엄 커넥터이며 저렴하지 않은 Dataverse가 필요합니다(무료 SharePoint와 비교할 수도 없음).

    수정된 기여 역할로 SharePoint를 통한 사용자 액세스를 비활성화할 수 있는 설정이 있습니다(방법은 이 블로그를 확인하십시오michelcarlo.com ).



    그러나 결정된 사용자가 자신의 Power App/Flow를 만들거나 API를 사용하여 이를 우회할 수 있으므로 이것은 완전히 안전하지 않습니다.

    운 좋게도 다른 방법이 있으며 이제 parseJSON이 있으므로 훨씬 쉬워졌습니다.


    시작하기 전에 필요한 몇 가지 사항이 있습니다.
  • Dataverse가 있는 환경
  • 앱과 흐름을 포함하는 솔루션
  • 실험적 기능에서 parseJSON이 설정됨


  • 테넌트에서 아직 사용하지 못할 수 있으므로 몇 주 기다려야 할 수 있습니다.

    그래서 우리는 필요한 모든 것을 가지고 있습니다. 계획은 무엇입니까? '사용자만 실행'을 방지하기 위해 하위 흐름을 사용하겠습니다. 이 흐름 소유자는 SharePoint 목록에 액세스한 다음 데이터를 앱으로 다시 전달할 수 있습니다. 여기에서 parseJSON을 사용하여 데이터를 다시 배열/컬렉션으로 변환합니다.


    모든 흐름과 앱은 솔루션에 있어야 합니다.

    하위 흐름



    하위 흐름은 필터 값을 수신하고 목록을 쿼리합니다. 반환된 배열은 문자열로 다시 전달됩니다.



    흐름 설정에서 '사용자만 실행'을 변경해야 합니다. 여기서는 흐름 소유자 자격 증명을 사용하도록 SharePoint 커넥터를 설정합니다(그래서 사용자는 목록에 액세스할 필요가 없습니다).


    앱 흐름



    다음 흐름은 Power App에서 호출하는 표준 흐름입니다. 단순히 필터 값을 하위 흐름에 전달합니다(사용자를 필터링하는 논리는 여기 또는 앱에 있을 수 있습니다(예: 모든 사람이 읽기 전용 보기를 갖는 조회 목록).




    따라서 첫 번째 비트는 필터를 사용하여 App Flow를 호출하는 쉬운 비트입니다(또는 필터 논리를 수행하기 위해 Flow에 대한 사용자 전달).

    흐름은 아래와 같은 SharePoint Get_Items JSON 배열을 반환합니다.



    이를 추출하기 위해 두 가지 옵션이 있습니다. 일반적인 반환 대신 배열을 반환하는 Response를 사용할 수 있습니다. 한 가지 문제는 프리미엄 커넥터입니다. 두 번째는 문자열에서 컬렉션을 추출할 수 있는 parseJSON 함수입니다.

    슬프게도 그것은 단순한 함수가 아니라 그것들의 중첩이며 여기에 있습니다:

    ClearCollect(colList,
        AddColumns(
                Table(
                    ParseJSON(Flow.Run("test").jsonresult)
                )
            ,"Title",Text(Value.Title)
            ,"Number",Value(Value.field_1)
            ,"Boolean",Boolean(Value.Boolean)
        )
    );
    


    어떻게 작동합니까?

    먼저 흐름(이 경우 테스트)을 호출하고 json 문자열(jsonresult)로 반환을 원하면 이를 parseJSON으로 반환합니다. parseJSON은 문자열에서 직접 개체를 추출할 수 있지만 배열/컬렉션을 얻으려면 먼저 테이블로 변환해야 합니다.

    Table(
         ParseJSON(Flow.Run("test").jsonresult)
    )
    


    한 가지 문제가 있는데 parseJSON이 각 필드의 유형을 모르기 때문에 하나의 '값' 필드만 얻습니다.



    따라서 각 Field의 유형을 설정하기 위해 Text(), Value() 및 Boolean()을 사용해야 하며, 이를 입력할 새 필드가 필요합니다. 그래서 AddColumns 함수가 필요합니다.

    AddColumns(CollectionFromJSON,
         ,"Title",Text(Value.Title)
         ,"Number",Value(Value.field_1)
         ,"Boolean",Boolean(Value.Boolean)
    )
    


    SharePoint 목록에는 표시 이름과 이름이 있으므로 링크를 업데이트할 필요 없이 열 이름을 바꿀 수 있습니다.

    보시다시피 field_1은 String이므로 Text()를 사용하고 field_2는 숫자/정수이므로 Value()를 사용하고 Boolean은 부울이므로 Boolean()을 사용합니다.



    이제 2개의 다른 계정/보안 역할을 사용할 수 있을 뿐만 아니라 문자열을 다시 배열/컬렉션으로 변환할 수 있습니다.

    좋은 웹페이지 즐겨찾기