def can_with_columns(self, user, action, table, columns):
        """
        根据权限进行列过滤
        注意一点，只要有一个条件能够通过权限检测，那么过滤后还会有剩余条件，最终就不会报错。
        如果全部条件都不能过检测，就会爆出权限错误了。

        :param user:
        :param action: 行为
        :param table: 表名
        :param columns: 列名列表
        :return: 可用列的列表
        """
        # TODO: 此过程可以加缓存
        # 全局

        global_data = self.rules.get('*')
        global_actions = self._parse_permission(global_data)
        if global_actions and action in global_actions:
            available = list(columns)
        else:
            available = []

        # table
        table_data = self.rules.get(table)
        table_actions = self._parse_permission(table_data)

        if table_actions and action in table_actions:
            available = list(columns)

        # column
        if type(table_data) == dict:
            # 这意味着有详细的列权限设定，不然类型是 list
            for column in columns:
                column_actions = self._parse_permission(table_data.get(column))
                if column_actions is not None:
                    if action in column_actions:
                        # 有权限，试图加入列表
                        if column not in available:
                            available.append(column)
                    else:
                        # 无权限，从列表剔除
                        if column in available:
                            available.remove(column)

        for check in self.common_checks:
            if check[0] == table and action in check[1]:
                ret = check[-1](self, user, action, available)
                if isinstance(ret, (tuple, set, list)):
                    # 返回列表则进行值覆盖
                    available = list(ret)
                elif ret == '*':
                    # 返回 * 加上所有可用列
                    available = list(columns)
                elif ret is False:
                    # 返回 false 清空
                    available = []
                if not available: break

        return available
def can_with_columns(self, user, action, table, columns):
        """
        根据权限进行列过滤
        注意一点，只要有一个条件能够通过权限检测，那么过滤后还会有剩余条件，最终就不会报错。
        如果全部条件都不能过检测，就会爆出权限错误了。

        :param user:
        :param action: 行为
        :param table: 表名
        :param columns: 列名列表
        :return: 可用列的列表
        """
        # TODO: 此过程可以加缓存
        # 全局

        global_data = self.rules.get('*')
        global_actions = self._parse_permission(global_data)
        if global_actions and action in global_actions:
            available = list(columns)
        else:
            available = []

        # table
        table_data = self.rules.get(table)
        table_actions = self._parse_permission(table_data)

        if table_actions and action in table_actions:
            available = list(columns)

        # column
        if type(table_data) == dict:
            # 这意味着有详细的列权限设定，不然类型是 list
            for column in columns:
                column_actions = self._parse_permission(table_data.get(column))
                if column_actions is not None:
                    if action in column_actions:
                        # 有权限，试图加入列表
                        if column not in available:
                            available.append(column)
                    else:
                        # 无权限，从列表剔除
                        if column in available:
                            available.remove(column)

        for check in self.common_checks:
            if check[0] == table and action in check[1]:
                ret = check[-1](self, user, action, available)
                if isinstance(ret, (tuple, set, list)):
                    # 返回列表则进行值覆盖
                    available = list(ret)
                elif ret == '*':
                    # 返回 * 加上所有可用列
                    available = list(columns)
                elif ret is False:
                    # 返回 false 清空
                    available = []
                if not available: break

        return available
def can_with_columns ( self , user , action , table , columns ) : # TODO: 此过程可以加缓存 # 全局 global_data = self . rules . get ( '*' ) global_actions = self . _parse_permission ( global_data ) if global_actions and action in global_actions : available = list ( columns ) else : available = [ ] # table table_data = self . rules . get ( table ) table_actions = self . _parse_permission ( table_data ) if table_actions and action in table_actions : available = list ( columns ) # column if type ( table_data ) == dict : # 这意味着有详细的列权限设定，不然类型是 list for column in columns : column_actions = self . _parse_permission ( table_data . get ( column ) ) if column_actions is not None : if action in column_actions : # 有权限，试图加入列表 if column not in available : available . append ( column ) else : # 无权限，从列表剔除 if column in available : available . remove ( column ) for check in self . common_checks : if check [ 0 ] == table and action in check [ 1 ] : ret = check [ - 1 ] ( self , user , action , available ) if isinstance ( ret , ( tuple , set , list ) ) : # 返回列表则进行值覆盖 available = list ( ret ) elif ret == '*' : # 返回 * 加上所有可用列 available = list ( columns ) elif ret is False : # 返回 false 清空 available = [ ] if not available : break return available
根据权限进行列过滤
        注意一点，只要有一个条件能够通过权限检测，那么过滤后还会有剩余条件，最终就不会报错。
        如果全部条件都不能过检测，就会爆出权限错误了。

        :param user:
        :param action: 行为
        :param table: 表名
        :param columns: 列名列表
        :return: 可用列的列表
根据权限进行列过滤 注意一点，只要有一个条件能够通过权限检测，那么过滤后还会有剩余条件，最终就不会报错。 如果全部条件都不能过检测，就会爆出权限错误了。