前提・実現したいこと
SPFx(typescrit)でSharePointのアイテム(フォルダ、ファイル両方)の権限を変更するというプログラムを作成しています。
権限の変更にはRESTAPIを使用して以下の流れで処理を行っています。
1.現在の権限を取得
2.親権限を継承している場合は権限の継承を破棄
3.現在の権限を削除
4.指定された権限を付与
3.の処理を現在の権限を制限アクセスに変更という風に変えたいのですが、
権限の更新方法を探してみても現在の処理方法(一度権限を消してからつける)くらいしか見つかりません。
発生している問題・エラーメッセージ
ドキュメントライブラリ/フォルダA/ファイルBという構造の権限を変更する際に、以下の流れで処理を行った場合にファイルBの権限がなくなってしまう問題が発生しています。
1.ファイルBにユーザー1に投稿権限を付与
2.フォルダAのユーザー1に閲覧権限を付与
原因としては、
フォルダAに権限を付与する際に一度ユーザー1の権限を削除するため、ファイルBが持つ権限がなくなってしまうことが考えられます。
該当のソースコード
一部省略していますが、このような感じです。
typescript
1 2 public static SetDeleteRoleAssignements(spHttpClient, absoluteUrl: string, listGuId: string, itemId: string, principalId: string): Promise<any> { 3 let url: string = `${absoluteUrl}/_api/web/lists('${listGuId}')/items('${itemId}')/roleassignments/getbyprincipalid('${principalId}')`; 4 return spHttpClient.post( 5 url, 6 SPHttpClient.configurations.v1, 7 { 8 headers: { 9 'Accept': 'application/json;odata=nometadata', 10 'Content-type': 'application/json;odata=verbose', 11 'odata-version': '', 12 'X-HTTP-Method': 'DELETE' 13 } 14 } 15 ) 16 .then((response) => { 17 if (response.ok) { 18 const promiseResponse: Promise<any> = response.json(); 19 return promiseResponse.then((data) => { 20 return data as Promise<any>; 21 }); 22 } else { 23 return undefined; 24 } 25 }) 26 .catch((err) => { 27 return undefined; 28 }); 29 } 30 public static SetAddRoleAssignment(spHttpClient, absoluteUrl: string, listGuId: string, itemId: string, principalId: string, roleDefId: string): Promise<any> { 31 let url: string = `${absoluteUrl}/_api/web/lists('${listGuId}')/items('${itemId}')/roleassignments/addroleassignment(principalid='${principalId}',roledefid='${roleDefId}')`; 32 return spHttpClient.post( 33 url, 34 SPHttpClient.configurations.v1, 35 { 36 headers: { 37 'Accept': 'application/json;odata=nometadata', 38 'Content-type': 'application/json;odata=verbose', 39 'odata-version': '', 40 } 41 } 42 ) 43 .then((response) => { 44 if (response.ok) { 45 const promiseResponse: Promise<any> = response.json(); 46 return promiseResponse.then((data) => { 47 return data as Promise<any>; 48 }); 49 } else { 50 return undefined; 51 } 52 }) 53 .catch((err) => { 54 return undefined; 55 }); 56 } 57 58 private AssignmnentUpdate(spHttpClient, absoluteUrl, listGuId, itemId, principalId, roleDefId){ 59 SetDeleteRoleAssignements(spHttpClient, absoluteUrl, listGuId, itemId, principalId) 60 .then(result =>{ 61 SetDeleteRoleAssignements(spHttpClient, absoluteUrl, listGuId, itemId, principalId, roleDefId) 62 .then(result =>{ 63 }) 64 }) 65 }
試したこと
権限を消す処理を行わずに権限の変更を試してみましたが、権限が重複してしまいました
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー