詳細な共有ルールのプログラムでの追加

エンジニアリングチームの網野です。

今回は詳細な共有ルールの説明とプログラムでの登録について
ご紹介していきます。

詳細な共有ルール

簡単に説明すると以前の記事にある設定の例外をつくような形です。

設定可能な項目

項目説明
モジュール名/所有者の「グループ/役割/役割とその従属の役割」
上記の役割・グループのデータに対して、次の役割・グループによる次の権限を付与します参照可能にする「グループ/役割/役割とその従属の役割」
権限読み取り:読み取りのみ
読み書き:読み書き可能
※削除不可

上記のような設定が可能になっています。

設定することによってモジュール単位で権限を追加で付加することが可能となります。

ただ、設定が非常に面倒なのとまとめて設定できなかったり、同じ設定を行うというのがとても煩雑でミスも起こりやすいです。

そこで今回はこれらをプログラムで設定する方法を紹介していきたいと思います。

プログラムでの追加

追加の際のプログラムは以下のようなものになります。

<?php

ini_set('error_reporting', E_ALL ^ E_NOTICE ^ E_DEPRECATED);
ini_set('display_errors', 1 );
ini_set("max_execution_time",1800);

$Vtiger_Utils_Log = true;
include_once('vtlib/Vtiger/Menu.php');
include_once('vtlib/Vtiger/Module.php');
include_once('modules/PickList/DependentPickListUtils.php');
include_once('modules/ModTracker/ModTracker.php');
include_once('include/utils/CommonUtils.php');
include_once('include/utils/UserInfoUtil.php');
include_once('includes/runtime/BaseModel.php');
include_once('includes/Loader.php');
include_once('includes/runtime/Globals.php');
include_once('modules/Vtiger/models/Module.php');
include_once('modules/Settings/SharingAccess/models/Module.php');

global $current_user;
$current_user = CRMEntity::getInstance('Users');
$current_user->retrieveCurrentUserInfoFromFile(1);//管理者

global $adb;
// Contacts、Accountsの共有部分はAccountsを指定
$moduleModel = Settings_SharingAccess_Module_Model::getInstance('Accounts');
$ruleModel = new Settings_SharingAccess_Rule_Model();
$ruleModel->setModuleFromInstance($moduleModel);
// 役割の場合           Roles:H6 の形
// 役割とその部下の場合 RoleAndSubordinates:H6 の形
// グループの場合       Groups:1 の形

// 共有ルールのカスタムルールの設定元
$ruleModel->set('source_id', 'Roles:H6');
// 共有ルールのカスタムルールの設定先
$ruleModel->set('target_id', 'Roles:H6');
// 0 : 読み取り
// 1 : 読み書き
$ruleModel->set('permission', 1);
$ruleModel->save();

echo("Script End\n");

それでは順に説明していきます。

ログインユーザーの設定

global $current_user;
$current_user = CRMEntity::getInstance('Users');
$current_user->retrieveCurrentUserInfoFromFile(1);//管理者

設定変更は管理者権限がないとアクセスができないので管理者としてログインします。

対象モジュールの指定

$moduleModel = Settings_SharingAccess_Module_Model::getInstance('Accounts');

権限を追加するモジュールの指定を行います。
今回は「顧客企業」モジュールを設定しています。

詳細な共有ルールの作成

$ruleModel = new Settings_SharingAccess_Rule_Model();
$ruleModel->setModuleFromInstance($moduleModel);

共有ルールののデータを作成し、対象モジュールを当てはめます。

所有者と参照可能にする 対象の指定

// 共有ルールのカスタムルールの設定元
$ruleModel->set('source_id', 'Roles:H6');
// 共有ルールのカスタムルールの設定先
$ruleModel->set('target_id', 'Roles:H6');

‘source_id’で所有者’target_id’で参照可能対象をそれぞれ設定します。
前半部分と後半部分は「:」で区切られています。
前半部分は以下のようなるーにになっています。

種類設定
役割 Roles
役割とその部下 RoleAndSubordinates
グループ Groups

後半部分はIDとなっています。

例としては
役割の場合「Roles:H6 」の形
役割とその部下の場合「RoleAndSubordinates:H6」の形
グループの場合「Groups:1」の形
となっています。

権限の指定

$ruleModel->set('permission', 1);

権限の設定値は以下となります

設定内容
0読み取りのみ
1読み書き ※削除は出来ません

保存

$ruleModel->save();

この処理共有ルールの情報が保存され、設定が反映されます。

まとめ

権限設定は「役割」「共有ルール」「プロファイル」とあり、とてもややこしいですが、うまく使えば様々な単位で権限を設定できるので試しに使ってみてください。

ご質問・お問い合わせはこちら

メールフォームへ