#結論
前回作成したSFのメタデータ自動バックツールを応用すれば、様々な権限をタイムトリガーで変更できます。
(前回の記事はこちら)
#今回試したもの
前回のものに加えて以下のものを作成しました。
myorg
┣mydeploytest
┃ ┗package.xml
┃ ┗profiles
┃ ┗testCustom.profile
┣ build.xml
・testCustome.profile:プロファイルの権限を定義
**********************
いろいろ書いてある
**********************
<objectPermissions>
<allowCreate>false</allowCreate>
<allowDelete>false</allowDelete>
<allowEdit>false</allowEdit>
<allowRead>false</allowRead>
<modifyAllRecords>false</modifyAllRecords>
<object>NotAccessOnEvening__c</object>
<viewAllRecords>false</viewAllRecords>
</objectPermissions>
*********************
いろいろ書いてある
*********************
・build.xml:Ant で実行されるコマンドを定義。
<?xml version='1.0' encoding='UTF-8'?>
<project xmlns:sf="antlib:com.salesforce" name="Sample usage of Salesforce Ant tasks" default="test" basedir=".">
<property file="build.properties" />
<property environment="env" />
<condition property="sf.username" value=""> <not> <isset property="sf.username" /> </not> </condition>
<condition property="sf.password" value=""> <not> <isset property="sf.password" /> </not> </condition>
<condition property="sf.sessionId" value=""> <not> <isset property="sf.sessionId" /> </not> </condition>
<taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce">
<classpath>
<pathelement location="../ant-salesforce.jar" />
</classpath>
</taskdef>
<target name="deployUnpackaged">
<sf:deploy username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="mydeploytest" rollbackOnError="true" />
</target>
</project>
以上を用意して、'Ant deployUnpackaged'を実行すれば、testCustome.profileで定義されている通りに、SF組織のプロファイルが変更されます。
testCostomプロファイルの夜間アクセスできないオブジェクト(NotAccessOnEvening__c)に対する全ての権限がfalseに変更されます。
#使いどころ
例えば、「取引先オブジェクトには24時間アクセスできるようにしておいてほしいが、あるカスタムオブジェクトには0時00分から8時00分の夜間に参照も出来ないようにして欲しい」みたいな要件があったら、こんな方法でも実装できるかなと思いました。
(まあ、夜間のみ'参照'もさせたくないっていう要件はなかなかないだろうし、'編集'させないで欲しいという要件なら入力規則で満たせますが...)
#今回ちょっとはまったポイント
プロファイルのメタデータを組織から取得する際に、あるオブジェクトに対して、'表示'権限までない場合、'.profile'ファイルの中身には、カスタムオブジェクトのアクセス権に関する定義が書いていませんでした。プロファイルの<objectPermissions>ブロックの記載を組織から取得したい場合は、最低でも一つのカスタムオブジェクトに対して、'表示'がTrueになっていないといけないみたいです。
#まとめ
今回のツールは、「実際にユーザのSF運用で使用するか」でいうと使用することはほぼありえないでしょうが、こんなことも出来て面白いという記事でした。「要件を満たす成果物が出来たら終了」ではなく、「それを使ってあんあこと、こんなことも出来ないかな」というマインドは常に持ち続けていきたいと思います。