Fix bug when permission overwrites could be applied out of order.
The bug was due to the fact that the way overwrites work is by doing a loop of all the values and then applying deny first and then allow. That way the overwrite is defined if role A and role B deny a permission but role C allows it (and said member has A, B, C roles) then the resolution should allow it rather than deny it regardless of the order of the data it is received in.
This commit is contained in:
		@@ -245,16 +245,22 @@ class Channel(Hashable):
 | 
			
		||||
            return Permissions.all()
 | 
			
		||||
 | 
			
		||||
        member_role_ids = set(map(lambda r: r.id, member.roles))
 | 
			
		||||
        denies = 0
 | 
			
		||||
        allows = 0
 | 
			
		||||
 | 
			
		||||
        # Apply channel specific role permission overwrites
 | 
			
		||||
        for overwrite in self._permission_overwrites:
 | 
			
		||||
            if overwrite.type == 'role' and overwrite.id in member_role_ids:
 | 
			
		||||
                base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny)
 | 
			
		||||
                denies |= overwrite.deny
 | 
			
		||||
                allows |= overwrite.allow
 | 
			
		||||
 | 
			
		||||
        base.handle_overwrite(allow=allows, deny=denies)
 | 
			
		||||
 | 
			
		||||
        # Apply member specific permission overwrites
 | 
			
		||||
        for overwrite in self._permission_overwrites:
 | 
			
		||||
            if overwrite.type == 'member' and overwrite.id == member.id:
 | 
			
		||||
                base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny)
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
        # default channels can always be read
 | 
			
		||||
        if self.is_default:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user