gpt4 book ai didi

python - 按访问权限对用户群体进行分类

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:43 28 4
gpt4 key购买 nike

我想做的是根据员工的角色来分类
在一个组织中。这是通过获取所有权限来计算的,或者
访问列表,它们用于目标企业软件。
每个用户可能有10000个用户和数十个权限。
编辑:当有大量用户时,绝大多数都会有一个有限的设置权限例如,它们可能都只有Employee。更复杂的情况是电力用户,而且会少很多。
另外,不要被我给出的权限名称误导,比如Acct1/Acct2,它们只是为了给你一种对域的感觉我正在寻找的解决方案在概念上应该可以工作,甚至可以使用随机分配的主键整数,就像您在许多ORM存储中看到的那样-权限之间没有隐含的关系。

import pprint
pp = pprint.PrettyPrinter(indent=4)

def classify(employees):
"""employees assigned the same set
of permissions are grouped together"""
roles = dict()
for user, permissions in employees.items():
permissions = list(permissions)
permissions.sort()
key = tuple(permissions)
members = roles.setdefault(key, set([]))
members.add(user)
return roles

everyone = {
"Jim": set(["Employee","Acct1","Manager"]),
"Marion": set(["Employee","Acct1","Acct2"]),
"Omar": set(["Employee","Acct1"]),
"Kim": set(["Employee","Acct1"]),
"Tyler": set(["Employee","Acct1"]),
"Susan": set(["Employee","Marketing","Manager"]),
}

result = classify(everyone)
print("pass1")
pp.pprint(result)

此时,分类系统返回以下信息:

{ ('Acct1', 'Acct2', 'Employee'): set(['Marion']),
('Acct1', 'Employee'): set(['Kim', 'Omar', 'Tyler']),
('Acct1', 'Employee', 'Manager'): set(['Jim']),
('Employee', 'Manager', 'Marketing'): set(['Susan'])}

由此,我们可以查看数据并手动为这些角色分配一些有意义的名称。
Senior Accountants - Marion
Accounting Managers - Jim
Accountants - Kim, Omar, Tyler
Marketing Manager - Susan

这项任务是手工完成的,但其目的是尽可能地保持“粘性”,即使员工被雇佣或离职,以及许可变更时也是如此。
让我们再做一次传球。
有人决定将 Acct2重命名为 SrAcct。人们被雇佣了,金姆离开了。
这由以下员工权限表示:

everyone2 = {
"Jim": set(["Employee","Acct1","Manager"]),
"Marion": set(["Employee","Acct1","SrAcct"]),
"Omar": set(["Employee","Acct1"]),
"Tyler": set(["Employee","Acct1"]),
"Milton": set(["Employee","JuniorAcct"]),
"Susan": set(["Employee","Marketing","Manager"]),
"Tim": set(["Employee","Marketing"]),
}

这次的输出是:

{ ('Acct1', 'Employee'): set(['Omar', 'Tyler']),
('Acct1', 'Employee', 'Manager'): set(['Jim']),
('Acct1', 'Employee', 'SrAcct'): set(['Marion']),
('Employee', 'JuniorAcct'): set(['Milton']),
('Employee', 'Manager', 'Marketing'): set(['Susan']),
('Employee', 'Marketing'): set(['Tim'])}

理想情况下,我们会认识到
Senior Accountants - Marion
Accounting Managers - Jim
Accountants - Omar, Tyler
Marketing Manager - Susan
new role - Tim
new role - Milton

蒂姆的角色将命名为a Marketer,而米尔顿的角色命名为a Junior Accountant
重要的是,角色名分配足够稳定,即使在员工被雇佣和离职(最频繁)以及权限被添加或重命名(更不频繁)时,也可以对员工人数进行推理可以不时地要求最终用户分配新的角色名或在关系之间做出决定。但大多数时候,它应该运行顺利。它不应该做的是猜测错误并错误地将一组用户标记为错误的角色名。
我遇到的问题是很容易被关注,但是权限集和定义角色的用户集都可以更改。分类时间很重要,但是这种分类机制的价值随着用户数量和权限的增加而增加。
我试过提取“定义角色的权限子集”例如, Employee被分配给每个人,因此可以忽略而 (Manager, Acct1)(Manager, Marketing)则是吉姆和苏珊的专利。麻烦的是,一旦你把20-30%的简单箱子拿出来,它就永远不会完结,就会发生组合爆炸。
我现在的想法是,为每一代人返回并计算新的员工权限角色分类,然后返回以获得与上一代人相比的模糊匹配“最佳匹配”。选择那些相当明确的角色,并要求用户决定关系,并根据需要分配新的角色名。
例如,权限上的精确匹配和雇员上的合理匹配意味着 'Omar', 'Tyler'在pass 2仍然 Accountants。另一方面,如果Marion离开了,而我有 "Jane": set(["Employee","Acct1","SrAcct"]),我将不得不要求最终用户仲裁并将她识别为 Senior Accountant
我过去曾与Jaccard Similarity( https://en.wikipedia.org/wiki/Jaccard_index)合作过,但我不确定它如何适用于双方都可以更改( Acct2=> SrAcct以及员工更改)的情况。
我很确定这种逻辑在以前是需要的,所以我希望对算法和策略提出建议。
噢,我正在寻找一种合理的独立方法,我可以在一个更大的Python应用程序的上下文中实现并解释不是机器学习的建议,关于如何配置像tensorflow这样的为我做这个。不过,如果有压力的话,我可以叫一批人来匹配。

最佳答案

这将是一个非常好的答案,非常抱歉,但您的问题非常广泛,需要一些逻辑,而不是一些特定的代码。
也许这个问题可以用“标签”来更好地解决我的意思是,一个人可以同时是一名员工、一名营销人员和一名经理(我想这三者都有权限)。
所以我建议采用另一种方法,而不是按帐户的权限分组,然后手动命名它们,首先对权限进行分类和命名(至少是其中比较流行和稳定的权限),然后通过为每个员工提供封装了多个权限的每个员工标记,将每个员工分配到正确的类别(或多个类别)。
然后,您将有相当多的用户或权限未分类,但希望随后您可以要求用户为您进行一些分类(例如,描述他们的位置/权限),并使用您的方法处理更小的问题集。
这样你就可以确定,当一个新员工进入时,通过查看他的权限并决定他适合哪里,他会得到适当的标签。当一个雇员离开时,没有什么区别,因为他不会单独影响权限和标记。

关于python - 按访问权限对用户群体进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com