二进制权限模型的应用

二进制权限模型
class BinAuth:
    #初始化
    def __init__(self):
        #导入mysql类
        self.mydb = MysqlDb()
    #判断用户对于单节点是否有权限
    def auth_node(self,uid,nodeid):
        # 查询节点功能的二进制码
        node = self.mydb.read(" select byte from node where id = %s " % nodeid)
       #关联查询
        role = self.mydb.read(" select b.byte from user a left join role b on a.type = b.id where a.id = %s " % uid)
        #位与运算
        res = node["byte"] & role["byte"]

        return res

    #获取用户权限(多对多)
    def get_usernode_m2m(self,uid):
        # user a
        # user_role b
        # role c
        #查询角色
        roles = self.mydb.reads(" select c.byte,c.id,c.name from user a left join user_role b on a.id = b.uid left join role c on b.roleid = c.id where a.id = %s " % uid)

        #查所有节点
        nodes = self.mydb.reads("  select * from node")

        nlist = []
        #遍历功能节点
        for x in nodes:

            for i in roles:
                #位与操作
                if int(x["byte"]) & int(i["byte"]):

                    nlist.append(x)

                    break

        return nlist

    #授权
    def set_node(self,roleid,nodeid):
        #查询节点功能的二进制码
        node = self.mydb.read(" select byte from node where id = %s " % nodeid)
        #查询角色 的二进制码
        role = self.mydb.read(" select byte from role where id = %s " % roleid)
        #进行授权 位或运算
        byte = role["byte"] | node["byte"]
        #修改数据库
        self.mydb.update(" update role set byte = '%s' where id = %s " % (byte,roleid))

    #获取用户权限(一对多)
    def get_usernode(self,uid):
        #查询角色的二级制码
        role = self.mydb.read(" select b.byte from user a left join role b on a.type = b.id where a.id = %s  " % uid)
        #查询所有节点
        nodes = self.mydb.reads(" select * from node ")
        # print(nodes)
        #遍历容器
        nlist = []
        #遍历功能节点
        try:
            #循环node表     将node表byte与role表中byte来比较  如果位与  就添加  否则返回空
            for x in nodes:
                #位与操作
                res = role["byte"] & x["byte"]

                if res:

                    n = nlist.append(x)
                    # print(n)

        except Exception as e:

            return []

        return nlist
    #取消授权
    def del_auth(self,roleid,nodeid):
        # 查询节点功能的二进制码
        node = self.mydb.read(" select byte from node where id = %s " % nodeid)
        # 查询角色 的二进制码
        role = self.mydb.read(" select byte from role where id = %s " % roleid)

        #位与
        res = role["byte"] & node["byte"]

        if res:

            #位异运算
            byte = role["byte"] ^ node["byte"]

            #写到用户的库里
            self.mydb.update(" update role set byte = %s  where id = %s" % (byte,roleid))




# binauth = BinAuth()
# print(binauth.get_usernode_m2m(1))
# print(binauth.auth_node(1,2))
# binauth.del_auth(1,3)
# binauth.set_node(1,2)
# binauth.set_node(1,1)
# binauth.set_node(1,3)
# print(binauth.get_usernode(1))

# acl = ACL()
# print(acl.get_nodeuser(3,1))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值