Teams でチャネル毎にアクセス権を変えたい

この記事は、[Office 365 Advent Calender 2018](https://adventar.org/calendars/3184)  (12/15) に参加しています。

Wordpress から Qiita への移行第 1 弾なので、ちょっとまとめとく。
- 2017 年は、[OneDrive の Log あつめ – CollectSyncLogs.bat](https://masaog.wordpress.com/2017/12/09/onedrive-%E3%81%AE-log-%E3%81%82%E3%81%A4%E3%82%81-collectsynclogs-bat/)
- 2016 年は、[OneDrive for Business の Troubleshooting の基本](https://masaog.wordpress.com/2016/12/10/onedrive-for-business-%E3%81%AE-troubleshooting-%E3%81%AE%E5%9F%BA%E6%9C%AC/)
- 2015 年は、[PowerShell を使って、Office 365 で利用しているすべてのサイト コレクションの使用容量を表示する](https://masaog.wordpress.com/2015/12/17/powershell-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%80%81office-365-%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%88/)

今年は、Teams をメインの社内のコラボレーション ツールとして使ってきたので、その時に基本機能のとして提供されていなかった、チャネル毎にアクセス権を変えてみたので、その共有です。

私は社内でエンジニアの教育を担当することが多く、その際の受講生とのやり取りをすべて Teams でやってきました。

　- 講座で使うファイルの共有
　- 連絡のやりとり
　- 講座の事前・事後アンケート
　- 講座内の Q&A
　- その他

そんな時、講師と受講生の立場からすると、講師が共有するファイルやサンプル コードなどは、みんなが使うものなので読み取りのみで、編集はさせたくないわけです。
でも、Teams からの設定だけでは、下記のようにメンバーのアクセス権を細かく設定できません。
![TeamsSettings.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/2faabd2e-3e08-2f01-c42f-8cd94a6b8231.png)

今回は例として、一般チャネルの "ファイル" タブのアクセス権を、講師 (所有者) は編集可能にして、受講生 (メンバー) には読み取りのみのアクセス権にできるようにしてみます。

まずは、"ファイル" タブを見ると、右端に "SharePoint で開く" ボタンがあるので、こちらをクリックします。
![OpenInSPO.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/c24f9a5e-97f0-2378-6589-405f3720e2c4.png)

すると、次のように SharePoint Online のドキュメント ライブラリが開きます。
![SPO_Doc1.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/e0483da8-a148-2b2f-28c9-7ab9720edffe.png)

あとは、このドキュメント ライブラリのアクセス権を見ていきます。

1. 画面右上の歯車アイコンからのメニューで "ライブラリの設定" を開きます。
![LibSettings.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/867adbb9-004b-091c-2249-e03be89309cd.png)

2. そして "このドキュメント ライブラリに対する権限" を開くと、下記のようにドキュメント ライブラリの権限が表示されます。
![LibAccessRights1.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/8fd9f45a-a7d8-b78a-c37a-6cc8b3cb250f.png)

この "要素技術実習 IoT on LPWA (これはサイト名) メンバー" の中には、チームを作成した時に作られる Office 365 Group アカウントが入っています。これを、"(サイト名)メンバー" から "(サイト名) 閲覧者" に移してあげればよさそうですが、これをやってしまうと SharePoint Online でメンバーがアクセスする他のサービスの利用にも影響ができてしまいます。
でも、このあたりで権限を変えればできそうな雰囲気ですね。

そこで、もう一度 SharePoint Online のドキュメントを見てみると、ドキュメント ライブラリには、Genral (一般) というフォルダーと、その他チャネル毎にフォルダーができています。
この、フォルダー毎にアクセス権を管理すればよさそうです。

そこで、ライブラリ内の個別のフォルダー毎にアクセス権をつけるために、[サイトのコンテンツと構造] という設定サイトを使います。
この設定は、SharePoint Server 発行インフラストラクチャがアクティブ化されたサイトコレクション機能である場合にのみ使用できるのですが、URL 直打ちでも利用できます。
_layouts/15/ の後ろに "sitemanager.aspx" を直接入力します。

```http
(テナント名).sharepoint.com/sites/(サイトコレクション名)/_layouts/15/sitemanager.aspx
```
すると、ちょっと懐かしいような、モダンじゃない UI の "サイトのコンテンツと構造" が表示されます。
![SiteManager1.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/7f3d7ec5-0daf-6ee5-4fa2-8dc643aad2b1.png)

"General" フォルダーにマウスカーソルを合わせて ▼ をクリックして、"権限の管理" を選択します。
![SiteManager2.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/5813ba6f-0d8d-4ed4-6d0e-d21d111739a2.png)

あとは、このフォルダーのアクセス権を固有のアクセス権にするために、権限の継承を中止します。
![AccessRights1.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/9a0cf5ad-7305-fdbd-6c05-b5b3f51a750f.png)

これで、このドキュメント ライブラリ内にある、一般チャネル用の "General" フォルダーに固有の権限をつけることができます。
今回は、講師は Teams 全体のフルコントロール持たせてもいいし、メンバーを閲覧にすればいいので (閲覧と編集の両方がある場合は編集が優先されるので)、まず、

1. "(サイト名) 所有者" グループに、講師のアカウントを追加
2. "(サイト名) 閲覧者" グループに、メンバーグループに入っていた Office 365 グループを追加。
3. "(サイト名) メンバー" グループをこの権限から削除
![AccessRights2.PNG](https://qiita-image-store.s3.amazonaws.com/0/147345/1112c648-72c9-7edc-81a6-0a264f88dd62.png)

これで、完了です。
Teams の一般チャネルの "ファイル" タブ (= SharePoint Online のドキュメント ライブラリ内の "General" フォルダー) は、講師はファイルの編集ができて、他のメンバーは閲覧のみとなります。

"General" フォルダーのみ固有の権限にしてるので、他のチャネルのファイル タブや操作に影響はありません。

Teams はリリースされた時から、Office 365 の様々な機能をうまく活用したサービスだなー、と思っていました。特に第一印象としては、SharePoint Online と Groups のフロントエンド アプリという位置付けで考えてて、今回の設定の裏付けとしては、下記の Microsoft のドキュメントを参考にしていました。

How SharePoint Online and OneDrive for Business interact with Microsoft Teams
https://docs.microsoft.com/en-us/microsoftteams/sharepoint-onedrive-interact


今年の OTA Hirofumi さんの[投稿](https://idea.tostring.jp/?p=3962)で紹介されていた、 Microsoft Ignite 2018 [BRK3118 – Microsoft Teams architecture update](https://myignite.techcommunity.microsoft.com/sessions/65507) を観て、Teams の Logical Architecture と High Level Architecture は、関係性がわかりやすくてすごく参考になりました。また、他の機能のアクセス権を変更する時にどのあたりを確認すればよいかわかるのでこれは、当面のリファレンスになりそうです。

また、このあたりのチャネル毎にアクセス権を変えたいとかのリクエストは、Microsoft の Teams の User Voice にもあったので、こんなことしなくても (Slack みたいに) UI から個別に管理できるようにしてほしい！って人は、ぜひ Vote しましょう！

Support for Private Channels
https://microsoftteams.uservoice.com/forums/555103-public