logo

サイト内検索
ココログ最強検索 by 暴想

最近のトラックバック

無料ブログはココログ

« salesforce force.comでのセキュリティー設定基本 | トップページ | これでSalesforceでの帳票開発も楽々しかも無料 Reports Connect for Salseforce »

force.com salesforceでのセキュリティー 共有設定のテストについて

前提

ロール階層を使用したレコードレベルセキュリティーをテストします。


組織のデフォルトで顧客カスタムオブジェクトを非公開

Default

これで、システム管理者以外のユーザは自身の所有する顧客レコード以外にアクセスできなくなる。


ロール階層(AdminRoleの配下にNormalRoleがある)

Role_3

これで、AdminRoleを付与されたユーザはNormalRoleを付与されたユーザの所有するレコードにアクセスできるように制限が緩和される。


ユーザ

User

securityneko@gmail.com(システム管理者)とsecuritynekoodu@gmail.comユーザーが存在する。


顧客レコード

Kokyarrecord


テストコード

@isTest
private class SecurityTest {

  public static testMethod void testRunAs() {
     // 通常全てのApexコードはシステムモードで実行される
     System.debug('Current User: ' + UserInfo.getUserName());
     List cs = [select id from customer__c];
     System.assertEquals(2,cs.size());

     // 1つ目と同じだが、明示的にシステム管理者ユーザを指定して実行みる
     User admin = [select id from User where username = 'securityneko@gmail.com'];
     System.runAs(admin) {
       System.debug('Current User: ' + UserInfo.getUserName());
       List cs1 = [select id from customer__c];
       System.assertEquals(2,cs1.size());
     }

     // ここはNormalRoleのsecuritynekoodu@gmail.comユーザで実行される
     User odu = [select id from User where username = 'securitynekoodu@gmail.com'];
     System.runAs(odu) {
       System.debug('Current User: ' + UserInfo.getUserName());
       List cs2 = [select id from customer__c];
       System.assertEquals(1,cs2.size());
     }

     //ロールを入れ替えてみる
     UserRole roleA = [select id from UserRole where name = 'AdminRole'];
     odu.UserRoleId = roleA.id;
     update odu;
     UserRole roleN = [select id from UserRole where name = 'NormalRole'];
     admin.UserRoleId = roleN.id;
     update admin;

     // さっきは1件のみ取得だったが、今回は2件取得できる
     System.runAs(odu) {
       System.debug('Current User: ' + UserInfo.getUserName());
       List cs2 = [select id from customer__c];
       System.assertEquals(2,cs2.size());
     }
   }
}


Apexコードは通常システムモードで起動しますが、runAs()の中では引数のユーザモードで実行されます。よって上述のように、「securitynekoodu@gmail.com」ユーザで実行した場合は取得できる顧客レコードは1件になります。



ロールを入れ替えることにより「securitynekoodu@gmail.com」ユーザーにAdminRoleが付与され、「securityneko@gmail.com」ユーザーがNormalRoleとなると「securitynekoodu@gmail.com」ユーザーでも取得できる顧客レコードは2件となるのが分かると思います。



レコードの共有ルールのテストはこのようにして作成できるのですが、
オブジェクトレベルや項目レベルセキュリティーのチェックはできません。

« salesforce force.comでのセキュリティー設定基本 | トップページ | これでSalesforceでの帳票開発も楽々しかも無料 Reports Connect for Salseforce »

Force.com」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1482716/41572788

この記事へのトラックバック一覧です: force.com salesforceでのセキュリティー 共有設定のテストについて:

« salesforce force.comでのセキュリティー設定基本 | トップページ | これでSalesforceでの帳票開発も楽々しかも無料 Reports Connect for Salseforce »