Posted at
vte.cxDay 18

【vte.cx応用】17. Index、暗号化、項目ACLについて

More than 3 years have passed since last update.

今日はIndex、暗号化、項目ACLについて説明します。

このドキュメントの補足説明になります。

Indexや暗号化、項目ACLはテンプレートを使って実現しています。

つまり、/_settings/template に設定情報を記述して保存すると動的に処理します。


Indexについて

Index(索引)はデータストアに格納されているデータを高速に取り出すための仕組みです。

テーブル設計でお馴染みかと思いますが、vte.cxでもIndexを作成することができます。

設定は簡単で、スキーマテンプレートと同じ/_settings/templateエントリーの<rights>タグにルールを記述するだけです。

項目名に続けて:(コロン)の後に正規表現を記述すると、データ登録の際にURIのうち正規表現にマッチするものがIndexとして登録されるようになります。URIにはEntryの実体(self)や別名(alias)などを指定できます。

データ量が多くなるものは必ずIndexを設定するようにしてください。


ソートについて

vte.cxはソートが苦手です。多くのNoSQLと同様、標準でソート機能があるわけではありません。

これはvte.cxの最大の欠点といってもいいかもしれません。

しかし、インデックス検索で値が昇順になることを利用すれば代用が可能です。

また、降順にソートを行いたい場合、項目とは別に降順用の項目(desc型)を追加することで実現できます。desc型は以下のようにLongの最大値から引いた値が自動でセットされます。

Long.MAX_VALUE - 降順ソートしたい項目の値

詳しくは、ドキュメントのソートを参照してください。


暗号化について

テンプレートに記述する項目名に続けて#を付けると暗号化項目となります。Index項目と暗号化項目はどちらか一つだけを指定できます。暗号化を指定するとIndex検索ができませんのでご注意ください。

暗号化は、内部に持っている秘密Key(usersecret)とidと組み合せてハッシュ化したものが実際の暗号Keyとして使われます。(※ ソースコードに秘密Keyを持っているので厳密には暗号化ではなくハッシュ化になります。)


項目ACLについて

フォルダに設定するACLではEntry単位でのアクセス制御ができましたが、項目ACLを使うと項目単位でのアクセス制御ができるようになります。

項目名に続けて=の後に項目ACLを指定できます。ACLは{uid|group}+{RW}の形式でユーザおよびグループの読込(R)書込(W)権限を指定することができます。,(カンマ)で複数件指定できます。

例えば、Contributorタグはサービス管理者(/_group/$admin)のRW権限がデフォルトで付いているため、フォルダACLのアクセス制御はサービス管理者しか操作できません。


運用中のテンプレートの更新について

テンプレートはサービス実行中でも更新することができますが、スキーマは項目の追加と項目名の変更のみが可能です。削除したい場合は管理画面でデータをリセットする必要があります。

開発中はデータリセットが可能でしょうが、運用開始後は追加もしくは名前変更で対応するようにしてください。

項目ACLは運用中でも更新可能ですが、Indexと暗号化の指定変更は期待通りに動作しない可能性がありますのでご注意ください。

これで本日はおしまいです。

明日はユーザ管理について説明します。

それでは。