Python 如何查询用户在flask和sqlalchemy中拥有的所有权限
我不知道如何获得用户拥有的所有权限。 我有以下4个模型。用户、角色、角色\权限作为关联表、权限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
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