24 Flask 权限控制实战

24 Flask 权限控制实战

在现代Web应用中,用户权限控制是非常重要的一部分。Flask 提供了灵活的方式来实现这一功能。通过简单的示例,我们将深入了解如何在 Flask 中实现用户权限控制。

设置 Flask 项目

首先,确保你已经安装了 Flask。如果还没有安装,可以使用以下命令:

1
pip install Flask

接下来,我们创建一个基本的 Flask 应用结构:

1
2
3
4
5
6
7
8
9
10
from flask import Flask, redirect, url_for, session, request

app = Flask(__name__)
app.secret_key = 'your_secret_key'

# 假设的用户数据库
users = {
'admin': {'password': 'admin123', 'role': 'admin'},
'user': {'password': 'user123', 'role': 'user'}
}

用户登录

我们需要一个简单的登录功能以便用户验证和角色分配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']

user = users.get(username)

if user and user['password'] == password:
session['username'] = username
session['role'] = user['role']
return redirect(url_for('dashboard'))

return 'Invalid username or password'

return '''
<form method="POST">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
'''

设定权限装饰器

为了控制不同角色用户的访问权限,我们可以创建一个权限装饰器:

1
2
3
4
5
6
7
8
9
10
11
12
from functools import wraps
from flask import abort

def role_required(role):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if 'role' not in session or session['role'] != role:
abort(403) # Forbidden
return f(*args, **kwargs)
return decorated_function
return decorator

创建受保护的路由

现在,我们可以创建一些受权限控制的路由:

1
2
3
4
5
6
7
8
9
10
11
12
13
@app.route('/dashboard')
def dashboard():
return f'Welcome, {session["username"]}! Your role is {session["role"]}. <a href="/logout">Logout</a>'

@app.route('/admin')
@role_required('admin')
def admin_dashboard():
return 'This is the admin dashboard.'

@app.route('/user')
@role_required('user')
def user_dashboard():
return 'This is the user dashboard.'

登出功能

为了完整性,我们添加一个登出路由:

1
2
3
4
5
@app.route('/logout')
def logout():
session.pop('username', None)
session.pop('role', None)
return redirect(url_for('login'))

启动应用

最后,添加以下代码来启动 Flask 应用:

1
2
if __name__ == '__main__':
app.run(debug=True)

案例测试

  1. 启动应用后,访问 /login
  2. 输入 adminadmin123,你将进入 /dashboard
  3. 访问 /admin,如果一切正常,你可以看到管理员界面。
  4. 如果尝试访问 /user,你会被拒绝(403 Forbidden)。

使用这种方式,我们可以轻松地管理用户的权限,确保只有具有适当角色的用户才能访问特定资源。

小结

本文展示了如何在 Flask 应用中实现简单的权限控制。通过使用 Flask 的 session 功能和自定义装饰器,我们能够有效地管理用户访问,确保应用的安全性。随着项目的发展,你可能需要考虑更复杂的权限管理方案,比如使用数据库存储用户角色和权限。

24 Flask 权限控制实战

https://zglg.work/flask/24/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议