Python 如何查询用户在flask和sqlalchemy中拥有的所有权限

Python 如何查询用户在flask和sqlalchemy中拥有的所有权限,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我不知道如何获得用户拥有的所有权限。 我有以下4个模型。用户、角色、角色\权限作为关联表、权限 class User(db.Model , UserMixin): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True , autoincrement=True) name = db.Column(db.String(60), nullable=False) role_id = db.Co

我不知道如何获得用户拥有的所有权限。 我有以下4个模型。用户、角色、角色\权限作为关联表、权限

class User(db.Model , UserMixin):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True , autoincrement=True)
    name = db.Column(db.String(60), nullable=False)
    role_id = db.Column(db.Integer, db.ForeignKey('role.id') , nullable = False )
    
    def __repr__(self):
        return f"User('{self.name}',{self.email}', '{self.company}' , '{self.country}' , '{self.password}' , '{self.role_id}')"

class Role(db.Model):
    __tablename__ = 'role'
    user = db.relationship('User' ,uselist=False)

    id = db.Column(db.Integer, primary_key=True ,autoincrement=True)
    role_name = db.Column(db.String(100), nullable=False , unique=True)

    _add_permission = db.relationship('Permission' , secondary=lambda:role_permission , backref= db.backref('permission', lazy = 'dynamic') , lazy = 'dynamic' )
    
    def __repr__(self):
        return f"ROle('{self.id}',{self.role_name}')"

role_permission = db.Table('Role_Permission', 
    db.Column('id',db.Integer, primary_key=True , autoincrement=True),
    db.Column('roleName' , db.Integer, db.ForeignKey('role.id') , nullable = False),
    db.Column('permissionName' , db.Integer, db.ForeignKey('permission.id') , nullable = False)
)

class Permission(db.Model):
    __tablename__ = 'permission'
    id = db.Column(db.Integer, primary_key=True , autoincrement=True)
    permission_name = db.Column(db.String(100), nullable=False , unique=True)

    _add_role = db.relationship('Role' , secondary=lambda:role_permission , backref= db.backref('role', lazy = 'dynamic') , lazy = 'dynamic')
    
    def __repr__(self):
        return f"Permission('{self.permission_name}')"
假设它是我的用户 user=user….,角色id=1//他是管理员

正如您所看到的,user1是admin,作为admin,他可以添加和读取。 如何使用sqlalchemy获得这个结果。?如何知道哪个用户拥有哪个角色和权限

由于我是这个领域的新手,希望学习和探索,非常感谢您的帮助。
提前感谢

好吧,假设您有一个用户ID。您可以以Python为中心的方式或SQL为中心的方式来实现这一点

在python中,您需要添加属性,以便用户能够访问角色以及角色id。在本例中,将role=db.relationship'role',backref='users'添加到用户模型中。第二,你为什么称这些关系为“添加”?我就把它去掉

要获取用户对象,可以使用User=User.query.get1,然后使用role=User.role来获取role的实例。现在,permissions=role.permissions,您就完成了。这很简单,但是需要一些查询—您只是没有注意到而已

user=user.query.get1 role=user.role 权限=角色权限 在SQL中,您还可以创建一个查询以一次获取所有内容:

选择权限\u id 来自角色\u权限 -您甚至可以删除此行并直接加入“用户和角色权限” 在role.id=role\u id上加入角色 在user.role\u id=role.id上加入用户 其中user.id=1; 在炼金术中会变成什么

权限\u id=db.session\ .queryPermission.id\ .joinRole\ .joinUser\ .filterUser.id==1\ 全部的 在这里,SQLAlchemy已经知道应该如何连接表,因为您在模型定义中放置了backref和secondary属性

Role:
id   role_name
1    admin
2    guest

role_permision
role_id     permission_id
1               1   ( he can add)
1               2  ( he can read)

permisison
1 ----> add
2----->read
3----->view