我有两张桌子:
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 表示读取+命令权限。网络管理员的 perm 值为 3。
第二个表也是如此,但这次是针对特定网络中的设备。当网络和设备的管理员授予用户权限时,用户将被添加到此表中。但是该网络的管理员未在此表中注册。他只在 perm=3 的 nets_permission 表中。
我必须在 Tornado Web 服务器的处理程序中创建一个选择当前用户权限的查询。代码是这样的形式:
# 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。
当前用户可以是网络的管理员(因此他仅在 nets_permissions 表中,perm=3)或对特定设备具有某些权限的用户(因此他仅在 devices_permissions 表中,具有某些 perm 值)。
在查询结果“userperm”中,我将使用一个整数在 html 页面中与权限值进行比较,并向用户显示或不显示某些内容。
对不起我的英语,但很难为我解释这个问题。我不知道我可以构造查询以获得我想要的结果。
非常感谢您的帮助。