私は2つのテーブルを持っています:
nets_permissions
user_id INT NOT NULL,
network_id BIGINT UNSIGNED NOT NULL,
perm INT(3) NOT NULL,
PRIMARY KEY(user_id, network_id)
devices_permissions
user_id INT NOT NULL,
network_id BIGINT UNSIGNED NOT NULL,
device_id INT UNSIGNED NOT NULL,
perm INT(3) NOT NULL,
PRIMARY KEY(user_id, network_id, device_id),
には、各ユーザーのnets_permissions table
権限があります。ユーザーは、異なるperm値を持つことができます。1は読み取り権限、2は書き込み権限、4は読み取り+コマンド権限です。ネット管理者のパーマ値は3です。
2番目の表についても同じですが、今回は特定のネットにあるデバイスについてです。ネットとデバイスの管理者がユーザーに許可を与えると、ユーザーはこのテーブルに追加されます。ただし、ネットの管理者はこのテーブルに登録されていません。彼は、perm=3のnets_permissionテーブルにのみ存在します。
TornadoWebサーバーのハンドラーで現在のユーザーの権限を選択するクエリを作成する必要があります。コードは次の形式です。
# Retrieve the current user
usr = self.get_current_user()
usr_id = usr['id']
self.lock_tables("read", ['nets_permissions as n, devices_permissions as d'])
usrperm = self.db.query("SELECT * FROM nets_permissions as n
LEFT OUTER JOIN devices_permissions as d
ON n.network_id = d.network_id WHERE d.user_id=%s
AND d.device_id=%s",
int(usr_id), sens.id);
self.unlock_tables()
usr_idで取得するのは、現在のユーザーのIDです。
現在のユーザーは、ネットの管理者(つまり、perm = 3のnets_permissionsテーブルにのみ存在する)または特定のデバイスに対する何らかの権限を持つユーザー(つまり、permの値を持つdevices_permissionsテーブルにのみ存在する)になります。
クエリ結果'userperm'では、整数を使用して、htmlページの後でパーミッション値と比較し、ユーザーに何かを表示するかどうかを指定します。
私の英語は申し訳ありませんが、問題を説明するのは難しいです。クエリを構造化して、必要な結果を取得できるかどうかわかりません。
ご助力ありがとうございます。