检查特定用户'不同组中的访问权限

时间:2015-12-22 04:55:51

标签: lua boolean-logic

在Garry的Mod中,我试图让它变成只有某些用户组可以使用上下文菜单。但它只适用于vip或superadmin用户组。不适合两者。谁能告诉我可能有什么问题?

hook.Add("ContextMenuOpen", "SuperAdminContext", function()

if not LocalPlayer():IsSuperAdmin() or LocalPlayer():IsUserGroup("vip") then return false end end)

1 个答案:

答案 0 :(得分:0)

你的病情是错误的。如果用户一个superadmin,代码会隐藏菜单 - 如果用户 一个vip,那么 - 这是相当的两个都错了。相反,两种方法之一:要么确保1)所有可能的组显示,用户在其中(使用and以确保所有条件适用),或2)没有可能显示的组适用(使用or和括号进行分组)。每个例子:

  1. if not LocalPlayer():IsSuperAdmin() and not LocalPlayer():IsUserGroup("vip") then
    
  2. if not (LocalPlayer():IsSuperAdmin() or LocalPlayer():IsUserGroup("vip")) then
    
  3. 布尔逻辑的否定是众所周知的棘手问题,但它几乎总是归结为仔细考虑细节的问题。

    真相表可以提供帮助。这是我们所需复合条件的真值表:

    IsSuperAdmin()  IsUserGroup("vip")  Result (hide menu)
    False           False               True
    True            False               False
    False           True                False
    True            True                False
    

    这看起来与or的标准真值表完全相同,只是最后一列是精确反转的。这是一个很好的迹象,即接近2是一个很好的匹配。