我需要你在编写一个查询的帮助 - 请查看下面选择查询 - 选择父权限
类别
CREATE TABLE IF NOT EXISTS `category` (
`catid` varchar(170) NOT NULL,
`name` varchar(170) NOT NULL,
`parent_catid` varchar(170) NOT NULL,
`inherit_parent_perms` enum ('Y', 'N') NOT NULL,
KEY `idx_wss` (`catid`)
);
INSERT INTO `category` VALUES('1', 'Fruits', '0', 'N');
INSERT INTO `category` VALUES('2', 'Apples', '1', 'N');
INSERT INTO `category` VALUES('3', 'Furniture', '0', 'N');
INSERT INTO `category` VALUES('4', 'Toys', '0', 'N');
INSERT INTO `category` VALUES('5', 'Gifts', '4', 'Y');
和权限表的表结构
权限
CREATE TABLE IF NOT EXISTS `permissions` (
`catid` varchar(170) NOT NULL,
`permission_object` enum ('seller', 'buyer') NOT NULL,
`permission_object_id` varchar(170) NOT NULL,
KEY `idx_wss` (`catid`)
);
INSERT INTO `permissions` VALUES('1', 'seller', '100'); -- Here category 1 is accessible to 'seller' object with ID 100
INSERT INTO `permissions` VALUES('1', 'buyer', '300'); -- Here category 1 is accessible to 'buyer' object with ID 300
INSERT INTO `permissions` VALUES('2', 'buyer', '200'); -- Here category 2 is accessible to 'buyer' object with ID 200
INSERT INTO `permissions` VALUES('3', 'buyer', 'all'); -- Here category 3 is accessible to all 'buyer' objects
INSERT INTO `permissions` VALUES('3', 'seller', 'all'); -- Here category 3 is accessible to all 'seller' objects
正如你所看到的类别表是如何在权限表中引用和类别可以通过一个ID的对象类型或所有对象类型时,对象ID设置为可以访问“所有”
这是查询到目前为止,我已经得到
SELECT id, name, p. *
FROM `catalogue` c
LEFT JOIN permissions p ON p.cat = c.catid
AND (
(
(
p.permission_object_id = 'all'
OR p.permission_object_id = '100'
)
AND p.permission_object = 'seller'
)
OR
(
(
p.permission_object_id = 'all'
OR p.permission_object_id = '100'
)
AND p.permission_object = 'buyer'
)
)
WHERE catid = 3
问题
上面的查询类型的作品 - 如如果类别3可由买方ID 100访问 - 它会显示它下面的内容。如果这个类别被允许买方ID为'all',那么任何买方都可以看到这个类别。
但问题是当我有子类别。因此,如果类别3可以通过'all'访问,然后我添加两个子类别4和5(类别3下),并告诉它继承来自父类的4和子类别5的权限,只能通过'seller'ID 200访问 - 那么我不明白在这里做什么。
我是否需要标记为继承父权限时复制所有父权限,并插入新行(很明显,新的类别ID).... OR ....我可以以某种方式使用相同的查询有一些变化(我不知道该怎么做)。
对上述任何其他更改/建议将不胜感激。
有什么建议吗? – user1421214