第4章:セキュリティー-簡単な紹介¶
:doc:`前の章<03_basicmodel>`では、ビジネスデータを保存するための最初のテーブルを作成しました。 Odoo のようなビジネスアプリケーションでは、最初に考慮すべき質問の1つは 1 がデータにアクセスできる人です。 Odoo は、特定のユーザーグループのデータへのアクセスを可能にするセキュリティメカニズムを提供します。
セキュリティのトピックは、 データへのアクセスを制限する で詳しく説明されています。この章では、新しいモジュールに必要な最小限のものを説明します。
データファイル(CSV)¶
Odooは高度なデータ駆動システムです。 動作は Python コードを使ってカスタマイズされますが、モジュールの値の一部はロードされたときに設定されるデータにあります。 データをロードする一つの方法は、CSVファイルを使用することです。 一例として、base`モジュールのインストール時にロードされる`国の州のリスト があります。
"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
...
idは、外部識別子( external identifier )です。これは、(データベース内の識別子を知らなくても) レコードを参照するために使用できます。
country_id:id
は、外部識別子( external identifier )を使用して国を参照します。name
は、州の名前です。code
は、州のコードです。
これらの3つのフィールドは、 res.country.state
モデルで 定義されています。
データを取り込んだファイルは、慣例的にモジュールの data
フォルダに置かれます。データがセキュリティに関連するものであれば、 security
フォルダに置かれます。データがビューやアクション(これは後で説明します) に関連する場合は、 views
フォルダに置かれます。さらに、これらのファイルはすべて、 __manifest__.py
ファイル内のデータ リストで宣言する必要があります。今回のファイル例では、 ベースモジュールのマニフェストに 定義されています。
また、データファイルの内容が読み込まれるのは、モジュールがインストールまたはアップデートされたときだけであることに注意してください。
警告
データファイルは、 __manifest__.py
ファイル内の順序に従って、順次ロードされます。つまり、データ A
がデータ B
を参照している場合、B
が A
の前に読み込まれていることを確認する必要があります。
なぜこれがセキュリティ上重要なのでしょうか?次のセクションで説明するように、モデルのすべてのセキュリティ設定は、データファイルを通して読み込まれるからです。
アクセス権限¶
参考: このトピックに関連する文書は、 アクセス権限 にあります。
注釈
目標: このセクションの最後に、次の警告が表示されなくなること。
WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules...
モデルにアクセス権が定義されていない場合、ユーザーがデータにアクセスできないとOdooは判断します。ログでも通知されます。
WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules in module estate, consider adding some, like:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
アクセス権限は、 ir.model.access
というモデルのレコードとして定義されます。各アクセス権には、モデル、グループ(グローバル・アクセスの場合はグループなし)、および 追加、読取、書込、削除2 の許可が関連付けられています。このようなアクセス権限は、通常、 ir.model.access.csv
というCSVファイルで定義されます。
以前の test_model
の例を示します。
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_test_model,access_test_model,model_test_model,base.group_user,1,0,0,0
idは外部識別子( external identifier )です。
name
は、ir.model.access
の名前です。model_id/id
は、アクセス権限が適用されるモデルを指します。モデルを参照する標準的な方法は、model_<model_name>
で、<model_name>
は、モデルの_name
の.
を ``_ `` に置き換えたものです。面倒ですか?確かにそうかもしれません・・・group_id/id
はアクセス権が適用されるグループを指します。perm_read
、perm_write
、perm_create
、perm_unlink
: 読取、書込、追加、解除の許可です。
Exercise
アクセス権限を追加してみましょう。
ir.model.access.csv
ファイルを適切なフォルダに作成し、 __manifest__.py
ファイルで定義します。
base.group_user
というグループに読取、書込、追加、解除の許可を与えます。
ヒント: ログの警告メッセージで、ほぼ全ての解決策がわかります ;-)
サーバーを再起動すれば、警告メッセージは消えているはずです。
いよいよ :doc:`UI <05_firstui>とやりとりしましょう!