用于检查用户权限的递归mysql查询

用于检查用户权限的递归mysql查询,mysql,recursive-query,Mysql,Recursive Query,我有三张桌子: 角色 其中role.parent_id引用role.id示例:admin从用户继承 行动 角色与行动 role_id | action_id | --------------------- 0 | 0 | (user can create) 1 | 2 | (admin can update) 2 | 1 | (manager can delete) 3 | 3

我有三张桌子:

角色

其中role.parent_id引用role.id示例:admin从用户继承

行动

角色与行动

role_id | action_id |
---------------------
0       | 0         |   (user can create)
1       | 2         |   (admin can update)
2       | 1         |   (manager can delete)
3       | 3         |   (ceo can reset)
因为ceo继承自admin,admin继承自user,所以ceo应该能够创建、删除和重置

如何编写递归查询以列出ceo或管理员等可以执行的所有操作

对于首席执行官,样本输出为:

    ceo  | create |
    ceo  | delete |
    ceo  | reset  |
像这样试试

select 'ceo' as name,t1.name as dd from role_action t2 
inner join 
(
select id,name,@pv:=pid as 'pid' from
(select id, name,pid from role
order by case when name='ceo' then '0' else 1 end,
 pid desc) 
as t
join
(select @pv:=3)tmp
where id=@pv) as t on 
 t2.id=t.id
inner join action t1 on t1.id=t2.aid

显示相同的示例输出。因为我对此有些怀疑。你想显示ceo的动作还是ceo和ceo的父母以及ceo的孩子啊?@Sathish我想显示ceo和父母的动作这个查询和你之前发布的查询有什么区别?我认为这个查询不起作用,因为在SQL FIDLE中,你已经将ceo的所有动作映射到了user_actions表中。在我的示例中,我只映射了一个特定于该用户的操作。我不理解您的概念。你想显示ceo操作和ceo操作的父级以及ceo操作的父级吗?如果ceo的父级是管理员,而管理员的父级是用户,那么,我想列出ceo的所有操作,这将包括管理员和用户的所有操作。因此,如果hat操作已分配给其父角色之一,则不必为ceo单独映射操作。我希望这能说明问题。@Chanthu如果你有足够的声誉,你也可以开始使用投票系统
    ceo  | create |
    ceo  | delete |
    ceo  | reset  |
select 'ceo' as name,t1.name as dd from role_action t2 
inner join 
(
select id,name,@pv:=pid as 'pid' from
(select id, name,pid from role
order by case when name='ceo' then '0' else 1 end,
 pid desc) 
as t
join
(select @pv:=3)tmp
where id=@pv) as t on 
 t2.id=t.id
inner join action t1 on t1.id=t2.aid