質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1353閲覧

【SharePoint Online】JavaScript で権限変更。

mie.8

総合スコア28

SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/07/05 10:13

編集2017/07/07 01:09

前提・実現したい事

JavaScriptを使用し、SharePoint Online上でユーザーの
「アクセス権限」を変更したいです。

本来の希望動作は「観覧・編集・登録・・・」等、様々に変更可能にしたいです。
現段階では、テスト作成なので「観覧のみ」に設定したいです。

JavaScript

1// リストを固有の権限に設定し既存権限をすべてクリア 2oListItem.breakRoleInheritance(false, false);

の部分で、権限をリセットされているはずが、リセット(初期化)されていないという事でしょうか?

発生している問題・Error Message

自分の権限は元々「フルコントロール」が付いております。
下記プログラムを実行し、
"自分の予想では"「フルコントロール → 観覧」に権限が変更されると思っていました。

しかし実際は、「フルコントロール → フルコントロール,観覧」のように
自分の権限に『追加』されてしまいます。

どなたか分かる方いれば、よろしくお願い致します。

実際のソースコード

JavaScript

1function breakSecurityInheritanceChangeUser() { 2 // リスト名 3 var listName = "test"; 4 5 // コンテキストの取得 6 var clientContext = new SP.ClientContext; 7 8 // 現在のログインユーザーの取得 9 var oUser = clientContext.get_web().get_currentUser(); 10 11 // 対象リストの取得 12 var oList = clientContext.get_web().get_lists().getByTitle(listName); 13 14 // 対象アイテム選択 15 var itemId = 1; 16 17 /*---------------------------------------------------------------------------*/ 18 // 処理 19 /*---------------------------------------------------------------------------*/ 20 21 // アイテム情報取得 22 var oListItem = oList.getItemById(itemId); 23 24 // リストを固有の権限に設定し既存権限をすべてクリア 25 oListItem.breakRoleInheritance(false, false); 26 27 // ロールバインディング 28 var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(clientContext); 29 30 // 閲覧アクセス許可レベルの追加 31 collRoleDefinitionBinding.add(clientContext.get_web().get_roleDefinitions().getByType(SP.RoleType.reader)); 32 33 // ユーザーをバインド 34 oListItem.get_roleAssignments().add(oUser, collRoleDefinitionBinding); 35 36 // ユーザー情報読込 37 clientContext.load(oUser); 38 39 // アイテム情報読込 40 clientContext.load(oListItem, "Title"); 41 42 // 実行 -- アラートにて表示 -- 43 clientContext.executeQueryAsync(function(){ 44 alert("次のアイテムに固有の権限を設定しました :\n" + oListItem.get_item("Title") + "\n\n" + "新たに次のユーザーに権限を付与しました :\n" + _spPageContextInfo.userLoginName); 45 }, onQueryFailed); 46} 47 48/*---------------------------------------------------------------------------*/ 49// 失敗時のメッセージ 50/*---------------------------------------------------------------------------*/ 51function onQueryFailed(sender, args) { 52 alert("Request failed. " + args.get_message() + "\n" + args.get_stackTrace()); 53}

試した事

補足情報(言語/FW/ツール等のVersion)

・Window 7
・SharePoint Online(Office365)
・IE、Google Chrome

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SharePointグループ(ユーザー)のアクスル許可レベルを変更するにはimportRoleDefinitionBindings()を使用します。

具体的な手順としては下記の通りです。

1.アクセス権限の継承を切断する
2.アクセス許可レベルを変更したいSharePoint グループ(ユーザー)を取得します
3.付与したいアクセス許可レベルを作成して、対象のSharePoint グループ(ユーザー)に付与して更新します。

サンプルコードは下記の通りです。

JavaScript

1 2//(1)アクセス権限の継承を切断する 3var siteUrl = '/sites/SiteUrl'; 4var ctx = new SP.ClientContext(siteUrl); 5var web = ctx.get_web(); 6var list = web.get_lists().getByTitle('ListName'); 7 8list.breakRoleInheritance(true, false); 9 10//(2)アクセス許可レベルを変更したいSharePoint グループ(ユーザー)を取得します 11var group = list.get_roleAssignments().getByPrincipalId(XX) //XXにはSharePointグループ(ユーザー)の割り振られているID(番号)が入ります。 12 13//(3)付与したいアクセス許可レベルを作成して、対象のSharePoint グループ(ユーザー)に付与して更新します。 14var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(ctx); 15this.oRoleDefinition = web.get_roleDefinitions().getByType(SP.RoleType.reader); 16collRoleDefinitionBinding.add(oRoleDefinition); 17 18group.importRoleDefinitionBindings(collRoleDefinitionBinding); 19group.update(); 20 21ctx.load(list); 22 23ctx.executeQueryAsync( 24 Function.createDelegate(this, this.onQuerySucceeded), 25 Function.createDelegate(this, this.onQueryFailed) 26); 27 28function onQuerySucceeded(sender, args) { 29 alert('成功!'); 30} 31 32function onQueryFailed(sender, args) { 33 alert('失敗...'); 34}
  • 補足

breakRoleInheritance()の解釈が少し誤っています。
正しくは下記の通りです。

× リストを固有の権限に設定し既存権限をすべてクリア
〇 リスト(サイト、アイテム...etc)のアクセス権限の継承を切断して、固有のアクセス権限が付与可能な状態にする

そのため、既存権限が消される訳ではないのでご注意下さい。

・breakRoleInheritance()のリファレンス
https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ee659518%28v%3doffice.14%29

投稿2019/06/05 15:50

ssbb

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問