flask视频网站(权限控制)

news/2024/5/9 12:50:27/文章来源:https://blog.csdn.net/Roy_Allen/article/details/121666424

文章目录

  • Auth
  • Role
  • Admin
  • 权限控制

Auth

  • 基于角色的访问权限控制
    • 有的管理员只能访问日志,而有的能访问会员列表,有的管理电影
    • 这部分还属于admin
  • 从创建表单模型开始,别着急
    class AuthForm(FlaskForm):"""访问权限控制"""name = StringField(label='权限名称',validators=[DataRequired("请输入权限名称!")],description="权限",render_kw={"class": "form-control","placeholder": "请输入权限名称!"})url = SubmitField(label="权限地址",validators=[DataRequired("请输入权限地址!")],description="权限地址",render_kw={"class": "btn btn-primary","placeholder": "请输入权限地址!"})submit = SubmitField(label="添加",render_kw={"class": "btn btn-primary"})
    
  • 定义视图,注意要指定GET/POST方法
    1
    • 这就很明显了,name字段存储操作的名称,url是这个操作在view中定义的访问路径
    • 访问权限控制就是限制能访问的url
  • 删除编辑查看等操作,与之前同理

Role

  • 给角色赋予权限
  • 表单模型,这里使用到多选
    class RoleForm(FlaskForm):"""管理员角色"""name = StringField(label='角色名称',validators=[DataRequired("请输入角色名称!")],description="角色",render_kw={"class": "form-control","placeholder": "请输入角色名称!"})auth = SelectMultipleField(label="权限列表",validators=[DataRequired("请选择权限")],coerce=int,# 选择之后,会将id返回choices=[(v.id, v.name) for v in auths],description="权限列表",render_kw={"class": "form-control",})submit = SubmitField(label="添加",render_kw={"class": "btn btn-primary"})
    
  • 角色只是给管理员的一顶帽子,最终的限定还是通过装饰器关联Auth和Admin
  • 列表、删除和编辑

Admin

  • 给管理员赋予角色,这里使用到关联查询和if判断超管
    class AdminForm(FlaskForm):"""管理员管理"""name = StringField(label='管理员名称',validators=[DataRequired("请输入管理员名称!")],description="管理员",render_kw={"class": "form-control","placeholder": "请输入管理员名称!"})pwd = PasswordField(label="管理员密码",validators=[DataRequired("请设置管理员密码")],description="管理员密码",render_kw={"class": "form-control","placeholder": "请输入管理员密码"})repwd = PasswordField(label="重复管理员密码",validators=[DataRequired("请重复管理员密码"),EqualTo('pwd', message="两次密码不一致!")],description="重复管理员密码",render_kw={"class": "form-control","placeholder": "请重复管理员密码"})# 最好跟数据库的字段名保持一致role_id = SelectField(label="角色列表",validators=[DataRequired("请选择角色")],# 选择之后,会将id以列表返回choices=[(v.id, v.name) for v in roles],description="角色列表",render_kw={"class": "form-control",})is_super = SelectField(label="是否为超级管理员",validators=[DataRequired("0:是  1:不是")],description="是否设置为超级管理员",coerce=int,choices=[v for v in (0,1)],render_kw={"class": "form-control","id": "input_is_super_id"})submit = SubmitField(label="编辑",render_kw={"class": "btn btn-primary"})
    
    # 管理员列表
    @admin.route('/admin/list/<int:page>', methods=["GET"])
    @admin_login
    def admin_list(page=None):if page is None:page = 1# 关联表的数据以 表名.字段 获取page_data = Admin.query.join(Role).filter(Role.id == Admin.role_id).order_by(Admin.addtime.desc()).paginate(page=page, per_page=3)return render_template('admin/adminlist.html', page_data=page_data)
    
  • 最终超管只通过is_super字段确定,role_id不起作用
    {% if v.is_super==0 %}<td>超级管理员</td>
    {% else %}<td>普通管理员</td>
    {% endif %}
    

权限控制

  • 权限——角色——管理员,最终需要使用装饰器,查询出当前登录管理员所拥有权限,限制访问
    • 超管使用角色,授权各管理员
    • 管理员登录后,会经过装饰器,根据admin表中授权的角色,限制访问路径
  • 超管授权存储在admin表,所以最终在这里查询
    # 权限控制装饰器
    def admin_auth(func):@wraps(func)def dec_func(*args, **kwargs):admin = Admin.query.join(Role).filter(# 当前登录对象Admin.id == session["admin_id"],# 被授权的角色Role.id == Admin.role_id).first()auths = admin.role.auths    # 获取可访问路径auths = list(map(lambda v:str(v), auths.split(",")))    # 权限idprint(auths)# 将授权路径搞到列表中auth_urls = Auth.query.all()urls = [v.url for v in auth_urls for val in auths if int(val)==v.id] # 嵌套for循环,最终if判断rule = str(request.url_rule) # 请求的路径print(urls)print(rule) # 这个多了个/admin,在哪定义?# 限制访问:if rule[6:] not in urls:# 先使用截取的办法实现功能abort(404)return func(*args, **kwargs)return dec_func
    
    • 根据role表中的授权情况,即可限制管理员访问!
  • 如何初始化定义超管的权限?可以通过直接在数据库中添加所有角色实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_826677.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 网站在Docker中运行

Docker作为新一代的虚拟化方式&#xff0c;未来肯定会得到广泛的应用&#xff0c;传统虚拟机的部署方式要保证开发环境、测试环境、UAT环境、生产环境的依赖一致性&#xff0c;需要大量的运维人力&#xff0c;使用Docker我们可以实现一次部署&#xff0c;到处运行。 本文介绍如…

给你介绍一个假的苹果网站,能肉眼看出来算我输!

这或许是用肉眼最难分辨的钓鱼网站&#xff0c;没有之一&#xff0c;不信你试试&#xff0c;能看出端倪吗&#xff1f; 网站的 URL 地址显示的是苹果官网&#xff0c;网址旁边是安全字样和绿色小锁&#xff0c;表示网站信息基于 https 加密传输&#xff0c;完全没什么问题&…

新手如何掌握制作和提交网站地图?

新手如何掌握制作和提交网站地图?网站地图作为根据网站的结构&#xff0c;框架&#xff0c;内容生成的导航网页文件。大多数人都知道网站地图对于提高用户体验有好处&#xff1a;它们为网站访问者指明方向&#xff0c;并帮助迷失的访问者找到他们想看的页面。那么什么是网站地…

006-网站统计中的数据收集原理及实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理&#xf…

漫谈聚类--网站

http://blog.pluskid.org/?page_id78 转载于:https://www.cnblogs.com/lm3306/p/9347665.html

json在线解析及格式化验证网站

2019独角兽企业重金招聘Python工程师标准>>> https://www.json.cn/ 转载于:https://my.oschina.net/u/3766116/blog/1861799

成都SEO网站优化与新媒体流量互通_成都辰星建站

为什么80%的码农都做不了架构师&#xff1f;>>> 成都SEO企业网站优化流量来源途径与互联网新媒体列表及流量互通实施方案,新媒体运营在当下的互联网流量运营方式占据着举足轻重的作用,企业网站流量导入外链建设已经逐渐削弱,星的流量运营导入方式已经诞生&#xff…

电商网站架构探索|SOA分布式架构详解

目前很多的企业都有自己的电商网站&#xff0c;但随着业务量的增长&#xff0c;并发量高了。由于平台架构的一些不足&#xff0c;会导致一系列严重的问题&#xff0c;电子商务平台的安全性&#xff0c;承受能力也经受着严峻的考验&#xff0c;而市面上绝大多数的电商网站是业务…

百度关键词模拟发包php程序,PHP可视化百度小程序平台微信狗源码OEM招商加盟版(多套网站风格模板+一键搭建)...

【温馨提示】源码包解压密码&#xff1a;www.youhutong.com资源描述PHP可视化百度小程序平台微信狗源码OEM招商加盟版(多套网站风格模板一键搭建)源码介绍&#xff1a;它拥有以下几个特点&#xff1a;1、系统终身使用&#xff0c;可以生成无数小程序&#xff1b;2、自带多种行业…

log4j mysql 详细日志_log4j将日志存储到数据库_太平洋学习网|一个最全的javaweb,js,css,html5,csdn,android,linux的学习网站。...

log4j是javaEE日志输出文件&#xff0c;通常情况下我们都是把log日志输出到指定的日志文件中&#xff0c;在这儿我们使用log4j将日志存储到mysql&#xff0c;oracle数据库表中&#xff0c;使用log4j前必须引入log4j.jar 和commons-logging.jar这两个jar包。一&#xff1a;配置l…

获取手机号_网站获取手机号的方法

很多人疑惑网站和app中的手机电话号码数据是怎么抓取的&#xff0c;是如何实现的&#xff0c;我在这里说下。一、数据的来源现在数据的来源有很多种&#xff0c;我给大家说下常见的几种数据来源方式和抓取方式。1、运营商数据&#xff0c;这种来源方式的话是运营商会有一个http…

WebMatrixRazor建站系列之WebMatrix介绍

WebMatrix介绍 WebMatrix是微软开发的一个免费的&#xff0c;轻量级Web开发工具。提供了一种简单的方式让我们创建一个站点。它包括IIS Express&#xff08;Web服务器&#xff09;&#xff0c;ASP.NET&#xff08;Web框架&#xff09;&#xff0c;和SQL Server Compact&#xf…

如何扫描网站的php文件在哪里,PHP实现的网站目录扫描索引工具

代码很简单&#xff0c;这里就不多废话了&#xff0c;本代码来至一位网友的投稿&#xff0c;经测试可用error_reporting(E_ALL & ~E_NOTICE);ignore_user_abort();set_time_limit(0);if ($_GET[act] op) {$data_url $_GET[url] . /;$hz $_GET[type];list($fw1, $fw2) e…

为您的IIS6下的网站配置Rewrite伪静态组件

首先我们下载Rewrite伪静态组件到服务器&#xff0c;点击下载&#xff0c;然后解压到D:\Rewrite下&#xff0c;解压后如下图&#xff1a; 温馨提示&#xff1a;ReWrite组件所在目录要有Users或者Everyone默认访问权限。您可以点击该目录右键&#xff0c;属性&#xff0c;安全&a…

超实用的54套ASP网站设计源码

2019独角兽企业重金招聘Python工程师标准>>> ASP是一种服务器端脚本编写环境&#xff0c;可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容。以下是则会54套ASP网站设计源码…

网站相关技术探究keepalive_timeout:

网站相关技术探究keepalive设多少&#xff1a; /proc/$PID/fd/$number0:标准输入 1:标准输出2:标准错误Test:[rootKTQT ~]# ll /proc/12857/fdtotal 0 lrwx------ 1 root root 64 Apr 4 17:49 0 -> /dev/nulllrwx------ 1 root root 64 Apr 4 17:49 1 -> /dev/nulllrwx…

Google的网站统计、分析系统

http://www.google.com/analytics/功能全&#xff0c;比较酷&#xff01;转载于:https://www.cnblogs.com/huobazi/archive/2005/11/16/277830.html

SharePoint Server 2013 Step By Step之管理网站导航

管理网站导航SharePoint网站导航包括两个区域的导航选项&#xff0c;快速启动和导航栏。默认情况下&#xff0c;快速启动位于网站内容的左侧&#xff0c;通常用于列出当前站点&#xff1a;如列表、类别&#xff0c;库&#xff0c;子网站等等。而导航栏&#xff0c;默认情况下&a…

ZT 如何使XP自动启动IIS默认网站

如何使XP自动启动IIS默认网站 [转贴 2007-08-27 21:33:24 ] 发表者: yl_wen 在服务里&#xff0c;把下面两个服务设置为自动即可&#xff1a; 1. IIS Admin 2. World Wide Web Publishing分类: 系统维护 转载于:https://www.cnblogs.com/Jasper-Wang/article…

如何通过添加链接让子网站显示在主页

进入“网站目录”网站&#xff0c;点击“创建网站”&#xff0c;添加一个子网站 在新建网站页面&#xff0c;输入网站的标题和URL&#xff0c;这里输入“test” 下面的权限、导航保持默认。网站类别也不做任何选择。 网站创建成功后&#xff0c;我们只能在网站地图里面看到相关…