实战篇:权限控制模块开发

73 篇文章 0 订阅
34 篇文章 0 订阅

实战篇:权限控制模块开发

权限控制模块简介

权限控制模块用于管理用户对应用中不同功能的访问权限。通过为用户分配角色和权限,可以控制他们可以执行的操作。

项目结构

继续使用之前讨论的Flask项目结构。

第1步:定义角色和权限

app/models/models.py中定义角色和权限模型。

from app import db
from flask_security import UserMixin, RoleMixin

class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(128))
    roles = db.relationship('Role', secondary='user_roles',
                            backref=db.backref('users', lazy='dynamic'))
第2步:创建数据库迁移

使用Flask-Migrate来创建新的数据库迁移。

flask db migrate -m "Add roles and user_roles tables"
flask db upgrade
第3步:初始化Flask-Security

run.py或其他初始化脚本中初始化Flask-Security。

from flask_security import Security, SQLAlchemyUserDatastore

# 创建用户和角色数据存储
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)
第4步:创建角色和初始用户

创建一些初始角色和用户,通常在应用首次运行时执行。

@app.before_first_request
def create_user():
    if not User.query.first():
        # 创建角色
        admin_role = user_datastore.create_role(name='admin')
        user_datastore.commit()
        # 创建管理员用户
        admin_user = user_datastore.create_user(email='admin@example.com',
                                                 password='password')
        user_datastore.add_role(admin_user, admin_role)
        user_datastore.commit()
第5步:保护路由

使用Flask-Security提供的装饰器来保护需要认证或特定角色的路由。

from flask_security import login_required, roles_required

@app.route('/admin')
@login_required
@roles_required('admin')  # 只有角色为admin的用户可以访问
def admin_dashboard():
    return 'Admin Dashboard'
第6步:注册和登录视图

Flask-Security提供了一套默认的认证视图,你可以直接使用或覆盖它们。

# 使用Flask-Security的默认认证视图
# 在run.py或app/__init__.py中注册蓝图
from flask_security.core import Security
from flask_security.views import auth

security = Security(app, user_datastore)
app.register_blueprint(auth)
第7步:测试权限控制

tests/test_routes.py中编写测试用例来验证权限控制。

def test_admin_access(client):
    response = client.get('/admin')
    assert response.status_code == 302  # 未登录重定向到登录页面
    # 登录测试用户并尝试访问
    # ...
结语

在本实战篇中,我们开发了一个基本的权限控制模块,包括角色定义、用户角色分配、路由保护和测试。


记得在开发过程中编写测试用例,并确保它们通过。这将帮助你确保代码的质量,并在将来重构或添加新功能时提供安全网。此外,Flask-Security提供了许多高级功能,如一次性密码、邮箱确认等,可以根据需要集成这些功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值