プログラミング知識0が挑むLINE WORKS API2.0 part5（利用権限タイプ作成編）

# 今回のテーマ
[前回](https://qiita.com/tnk-tty/items/4a758d39448b854aee40)は役職を作成しました。

>　~~1.組織を作る~~
>　~~2.役職を作る~~
>　3.利用権限タイプを作る
>　4.ユーザーを作る
>　5.設定した利用権限タイプで動作するかチェック！

今回は利用権限タイプを作成します！

### 利用権限タイプとは？
こちらも役職と同じく、必ず設定しなければならないという項目ではありません。

LINE WORKSでは管理者がユーザーに対して機能を制限する事ができます。
ユーザー個別に設定はできるのですが、利用権限タイプを設定しているユーザーであれば1度の設定で複数のユーザーに設定を適用する事ができます。

### 利用権限タイプを使って設定できること
利用権限タイプを使用して行う設定としては、[サービス利用設定](https://guide.worksmobile.com/jp/admin/admin-guide/security/authority/authority/)や[組織図の閲覧制限](https://guide.worksmobile.com/jp/admin/admin-guide/security/limit-visibility/)がよく使われると思います。

*  **サービス利用設定**
これは例えば「内勤の方はモバイルでLINE WORKSを使用する必要が無いので、内勤の人にはモバイルアプリの利用をさせないようにする」ような感じで、 **特定のサービスの利用を制限するような機能**です。

サービス利用設定は<font color=red>APIで設定できず</font>、ブラウザの管理者画面で設定します。

*  **組織図の閲覧制限**
例えば「特定のメンバーのみ、社内のすべての組織・メンバーの情報を表示させず、 **閲覧できる組織図を制限したい**」のような場合に使用する機能です。

「組織図の閲覧制限」はAPIとブラウザの管理者画面の両方で設定できます。

### 前提条件を変更
ここで一旦[以前の計画](https://qiita.com/tnk-tty/items/b16bd06f5cb1301fefa0#%E5%89%8D%E6%8F%90)に2つ条件を追加します。

以下を条件に追記します

* アルバイトや派遣社員は所属している組織以外の組織・メンバーを確認できない
* 内勤の職員はモバイルアプリを使用しない

こちらは後ほどそれぞれの設定操作を試してみましょう！

### ドキュメントチェック！
[利用権限タイプの登録](https://developers.worksmobile.com/jp/reference/directory-employment-type-create?lang=ja)のドキュメントを見ていきます。

どうやら作成の流れは前回の役職と同じようですね！

1.利用権限タイプ設定の有効化
2.利用権限タイプの登録

のように進めていきまっしょう！

### 利用権限タイプ設定の有効化
まずは[利用権限タイプ設定の有効化](https://developers.worksmobile.com/jp/reference/directory-employment-type-enable?lang=ja)です。

[役職の時](https://qiita.com/tnk-tty/items/4a758d39448b854aee40#%E5%BD%B9%E8%81%B7%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96api%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)と同じですね！
Request Bodyは無いのでURLをコピーして実行するだけでOK！

![01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/923556ba-bd01-298c-f7c0-69c2439215a9.png)

204 No Contentということで正常に設定ができました！

![02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/34095827-1f66-ecc9-471b-42d2322110ce.png)

### 利用権限タイプの登録
今回は二つの利用権限タイプを作成しようと思います。
* 内勤者
* 派遣社員/アルバイト

それぞれをどう使うかは一旦置いておいて、まずは二つの利用権限タイプを作成します。

### 最低限の情報
パラメータの名称が違うだけで、役職と同じですね！

* domainId
* displayOrder
* employmentTypeName

今回の作成はスムーズに行きそうです。
ではまず、「派遣社員/アルバイト」の利用権限タイプを設定します。

![03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/f4c3c8f1-e2ec-c20e-3ced-9afe4e080d23.png)

201 Createdで利用権限タイプが作成されました！
いやーエラーが起きないって良いですね～

<details><summary>実行結果</summary>

~~~
{
    "domainId": xxxxxxxx,
    "displayOrder": 1,
    "employmentTypeName": "派遣社員/アルバイト",
    "employmentTypeExternalKey": null,
    "i18nNames": [],
    "employmentTypeId": "98765432-1098-8765-4321-098765432100"
}
~~~
</details>

 **employmentTypeId**という<font color=red>利用権限タイプを識別するための情報</font>がレスポンスされました。
利用権限タイプを修正したい場合や、利用権限タイプを使って組織図の閲覧制限をAPIで設定したい。のような場合にはemploymentTypeIdが必要になりますね！

続けて、「内勤者」と言う利用権限タイプも作成しました。

### 出来上がったものがこちら
作成された利用権限タイプは[利用権限タイプリストの取得](https://developers.worksmobile.com/jp/reference/directory-employment-type-list?lang=ja)で見ることが出来ます。

![05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/b1a2e87a-61da-5049-2b83-a3257bd1eef5.png)

<details><summary>実行結果</summary>

~~~
{
    "responseMetaData": {
        "nextCursor": null
    },
    "employmentTypes": [
        {
            "domainId": xxxxxxxx,
            "displayOrder": 1,
            "employmentTypeName": "派遣社員/アルバイト",
            "employmentTypeExternalKey": null,
            "i18nNames": [],
            "employmentTypeId": "00065432-1098-8765-4321-098765432199"
        },
        {
            "domainId": xxxxxxxx,
            "displayOrder": 1,
            "employmentTypeName": "内勤",
            "employmentTypeExternalKey": null,
            "i18nNames": [],
            "employmentTypeId": "98765432-1098-8765-4321-098765432100"
        }
    ]
}
~~~
</details>

ブラウザの管理者画面ではこのように表示されています。
![07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/731354c3-41ac-1375-80fa-63dbb8afc172.png)


## 利用権限タイプを使った設定（組織図の閲覧制限）
では実際に作成した利用権限タイプで組織図の閲覧制限を設定します。

[利用権限タイプの組織図閲覧制限の登録](https://developers.worksmobile.com/jp/reference/directory-employment-type-orgunit-access-restrict-create?lang=ja)のドキュメントをチェック！

requiredの情報は一つだけでした。
* accessRestrictType

accessRestrictTypeはどのような制限を設定するか？というパラメータですね。
組織図の閲覧制限は以下の3パターンの設定方法があります。

>ONLY_ME: 自身のみ閲覧可能
>ONLY_MY_ORGUNIT: 自身が所属している組織のユーザーのみ閲覧可能
>ONLY_MY_AND_SPECIFIED_ORGUNIT: 所属組織と指定組織のユーザーのみ閲覧可能

ONLY_MY_AND_SPECIFIED_ORGUNITを選択した場合は、指定組織を設定しないといけないので、specifiedOrgUnitsが必要になる。ということですね！

specifiedOrgUnitsでは指定する組織のorgUnitIdが必要になります。

### 利用権限タイプの組織図閲覧制限の登録
前述の通り、以下の条件を追加しました。

> * アルバイトや派遣社員は所属している組織以外の組織・メンバーを確認できない

これを実現するために設定を進めます。

* メソッドはPOST
* URLの赤線部分({employmentTypeId})は利用権限タイプ「派遣社員/アルバイト」のemploymentTypeIdを入力
* 自分の所属している組織以外は見れないようにするため、BodyのaccessRestrictTypeは「ONLY_MY_ORGUNIT」

![08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/3eae1e43-5d01-f0ea-b602-1b567a861d8c.png)

はい。201 Createdでレスポンスされました。
レスポンスの内容もあっさりしたものですね～

<details><summary>実行結果</summary>

~~~
{
    "accessRestrictType": "ONLY_MY_ORGUNIT",
    "specifiedOrgUnits": []
}
~~~

</details>

### 利用権限タイプの組織図の閲覧制限設定状況を確認する
これはAPIでも確認できますし、ブラウザの管理者画面からも確認できます。

#### APIで確認（[利用権限タイプの組織図閲覧制限の取得](https://developers.worksmobile.com/jp/reference/directory-employment-type-orgunit-access-restrict-get?lang=ja)）

GETなので、URLの{employmentTypeId}部分を確認したい利用権限タイプの情報に置き換えて実行します！

![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/6b4e9b6c-6590-92ea-9e92-51cb931e61a3.png)

レスポンスされる情報は登録操作の時と同じ内容ですね。あっさり。

<details><summary>実行結果</summary>

~~~
{
    "accessRestrictType": "ONLY_MY_ORGUNIT",
    "specifiedOrgUnits": []
}
~~~

</details>

#### ブラウザの管理者画面で確認

管理者画面 > セキュリティ > 組織図の閲覧制限 > 利用権限タイプを開くと以下のように表示されています。

![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/a773b705-e698-569c-bc30-3d63c41b8cfa.png)

正しく設定されている事が確認できました！

### 利用権限タイプを使った設定（サービス利用設定）
前述の条件は以下の通りでした。

>* 内勤の職員はモバイルアプリを使用しない


サービス利用設定はAPIで設定できないので、ブラウザの管理者画面で操作します。
LINE WORKSのサービス利用設定に関するガイドは[こちら](https://guide.worksmobile.com/jp/admin/admin-guide/security/authority/authority/)です。

管理者画面 > セキュリティ > サービス利用設定を開き、「権限テンプレートの作成」をクリックします。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/ab89ff6e-835e-26f1-5cf3-f13ef2f71dc8.png)

権限テンプレートに任意の名前を入力します。
![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/37bd2f74-7703-cbde-024b-a3b3d8b33c5e.png)

「利用サービスの設定」タブでは、「どのサービスの利用を制限するのか？」を設定します。
「権限の修正」をクリックします。

![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/135f6524-7d42-6c34-170d-f2b56df284a3.png)

サービスごとに設定できるのですが、今回はモバイルアプリを使用しない。という条件なので、「モバイル版アプリ」をOffにします。
各サービスのモバイルアプリもグレーアウトしましたね！
「保存」をクリックして、確認のダイアログは「OK」をクリックして進めます。
![15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/cb7a5917-9558-2239-e45e-9c6916277261.png)

次に「利用権限タイプ」タブを選択し、「利用権限タイプを追加」をクリックします。

![17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/cd96018e-0bf8-f6f6-c537-0cfb700ed4a9.png)

作成済みの利用権限タイプが表示されますが、今回は「内勤」を選択して「OK」をクリックします。
確認のダイアログは「OK」で進めます。
![18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/bc59bd20-1f4e-0eb2-a8e1-64c531ec0950.png)

これで設定完了です！

![20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740500/3fc7aac9-9fdc-42a4-8481-ebf874f1692a.png)

# まとめ
* LINE WORKSの以下のドキュメントを参照しました。
[利用権限タイプ設定の有効化](https://developers.worksmobile.com/jp/reference/directory-employment-type-enable?lang=ja)
[利用権限タイプの登録](https://developers.worksmobile.com/jp/reference/directory-employment-type-create?lang=ja)
[利用権限タイプリストの取得](https://developers.worksmobile.com/jp/reference/directory-employment-type-list?lang=ja)
[利用権限タイプの組織図閲覧制限の登録](https://developers.worksmobile.com/jp/reference/directory-employment-type-orgunit-access-restrict-create?lang=ja)
[利用権限タイプの組織図閲覧制限の取得](https://developers.worksmobile.com/jp/reference/directory-employment-type-orgunit-access-restrict-get?lang=ja)
* 今回はブラウザの管理者画面にも触れる部分が多かったので、以下も参考にご覧ください。
[サービス利用設定](https://guide.worksmobile.com/jp/admin/admin-guide/security/authority/authority/)
[組織図の閲覧制限](https://guide.worksmobile.com/jp/admin/admin-guide/security/limit-visibility/)