python利用session进行访问限制的想法
admin
2023-07-30 20:46:29
0

近期在开发一个平台,平台的展示项需要分权,对应部门进行限制访问,决定利用session进行权限限制。

具体做法

  1. 用户访问login页面,完成登录密码验证后,在缓存中查找到用户的level;
  2. 将该level值赋予新定义的session新属性session.level,webpy的session处理本身不具备level这个属性,此为自定义

    session.png

  3. 后续访问其它页面时与该页面的权值进行比较,如果小于页面权值则禁止访问。

下面是具体实现,暂未具体设计用户数据权限表,所以粗略写了几个模拟成员来模拟功能,若是急用觉得也还合适。

#用户密码
allowed = (   
    (\'admin\', \'123123\'),
    (\'cuibing\', \'123123\')
)
#权限模拟,利用字典模拟了一个类似switch
def getlevel(username):
    level = {        
        \'admin\':3,
        \'cuibing\':1
    }
    return level.get(username)
下面是登录时的login类
class Login:    
    def GET(self):        
        return render.login()    
    def POST(self):        
        i = web.input()        
        username = i.get(\'username\')        
        passwd = i.get(\'password\')        
        if (username, passwd) in allowed:        
             #账户校验成功标记
            session.logged_in = True
             #此处就是赋予权值的过程。
            session.level = getlevel(username)
            raise web.seeother(\'/\')
        else:
            return web.seeother(\'/loginerror\')
以tables页为例进行权限校验
class Tables:
    def GET(self):
        if session.get(\'logged_in\', False):  
        #这里如果没有logged_in的值就会默认返回False
            try:
                if not session.logged_in:    
                #防止未登录的url直接跳转
                    return web.seeother(\'/login\')
                elif session.level < 2:      
                #前面的铺垫工作终于起作用了,这里我将table页的权制设定为2
                    return \"You have no permission to visit this page!\"                
                else:
                    return render.tables()
            except Exception, e:
                ErrStr = \"tables:\"+ str(e)
                logs.writeog(ErrStr)         
                #这里利用logging写了一个日志系统
                return web.seeother(\'/fasle\')
        else:
                raise web.seeother(\'/login\')

利用“cuibing”这个账户试验一下效果:

cuibing的level是 1,tables页的权限设置为了2.


login.png


验证.png

基本效果达到了

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...