RBAC权限管理案例----员工管理项目

RBAC权限管理项目     不同用户相对应的角色拥有的权限 和 功能不同

1.RBACDesign.py   (python连接数据库工具类)


"""

权限管理系统设计  RBAC

1.后端管理系统

账号密码登陆成功 页面显示

不同用户看到的界面是不同的*可用按钮也是不同的

不同级别会员的可执行的操作也不同

2.重要  *****  项目主页面  设计理念

不同权限的用户(普通用户*会员)看到的菜单个数和按钮操作是不同的

不同等级的会员(普通会员*超级会员*黄金会员)看到的菜单个数和按钮操作也不同

3.需求描述 :后台管理平台 实现如下功能:

1.输入用户名密码就可以进行登录到主页

2.不同角色用户*普通用户 会员用户*看到的页面和按钮使用不同

3.同一角色的不同级别显示的功能按钮不同

比如*都是客户 vip客户就有批量删除的权利和功能

普通用户没有删除的权力和功能

提示* 核心角色:用户 角色 权限 菜单

注意* 工作中每个项目都需要使用RBAC

"""

import pymysql

class RBACDesign:

def __init__(self,host,port,user,passwd,db,charset="utf8"):

self.host=host

        self.port=port

        self.user=user

        self.passwd=passwd

        self.db=db

        self.charset=charset

    def get_connect(self):

self.conn=pymysql.connect(host=self.host,port=self.port,user=self.user,passwd=self.passwd,db=self.db,charset=self.charset)

self.cur=self.conn.cursor()

def get_close(self):

self.cur.close()

self.conn.close()

def get_execute(self,sql,params):

num=0

        self.get_connect()

num=self.cur.execute(sql,params)

return num

def get_one(self,sql,params=()):

result=None

        self.get_connect()

self.cur.execute(sql,params)

result=self.cur.fetchone()

return result

def get_all(self,sql,params=()):

result=None

        self.get_connect()

self.cur.execute(sql,params)

result=self.cur.fetchall()

return result

2.   Modeler.py              (模型实体工具类  面向对象的时候实例化对象)

#模型里面包含的菜单

"""

数据模型类也就是菜单类

模型类/实体类:每个模型类和数据库中的表格一一对应

"""

class User:

def __init__(self,u_id,u_name,u_pwd,u_r_id):

self.u_id=u_id

        self.u_name=u_name

        self.u_pwd=u_pwd

        self.u_r_id=u_r_id

class Role:

def __init__(self,r_id,r_name,r_descipe,r_level):

self.r_id=r_id

        self.r_name=r_name

        self.r_descripe=r_descipe

        self.r_level=r_level

class Modules:

def __init__(self,m_id,m_name,m_pid,m_level,m_icon,m_href,m_cengji):

self.m_id=m_id

        self.m_name=m_name

        self.m_pid=m_pid

        self.m_level=m_level

        self.m_icon=m_icon

        self.m_href=m_href

        self.m_cengji=m_cengji

# class R_M:

#    def __init__(self,r_id,m_id,quanxian):

#        self.r_id=r_id

#        self.m_id=m_id

#        self.quanxian=quanxian

class R_M():

def __init__(self,r_name,m_name,m_icon,m_href,r_level,quanxian,m_pid):

self.r_name=r_name

        self.m_name=m_name

        self.m_icon=m_icon

        self.m_href=m_href

        self.r_level=r_level  #菜单级别相当于是菜单顺序

        self.rm_quanxian=quanxian

        self.m_pid=m_pid  #模块中的父编号

3.MyUtils.py   (工具类  用户权限)

import itertools

def Change(number):

lists=[1,2,4,8]#权限列表 1.表示增加按钮 2.表示删除按钮 3.表示修改按钮 4.表示查询按钮

    try:

base_two=int(str(number),base=2)

except Exception as e:

print(e)

base_two=int(number)

finally:

for fooin range(1,len(lists)+1):

data=list(itertools.combinations(lists,foo))

value=[ifor iin dataif base_two==sum(i)]

if value:

return list(value[0])

print(Change(12))

4.RBACManager.py            (连接数据库之后,用户输入)


"""

员工管理的扩展功能*

1.输入用户名密码登录页面

2.显示用户相对应的角色可访问的菜单和菜单中按钮的功能

3.公司管理

4.员工管理

5.菜单管理(增加菜单,删除菜单,修改菜单,查询菜单,菜单顺序调整)

6.角色管理CURD

7.菜单中功能权限管理CURD

完整的RBAC权限设计逻辑

"""

import re

from RBAC权限设计.RBACDesignimport *

from RBAC权限设计.Modelerimport  *

from RBAC权限设计.MyUtilsimport *#自己的权限算法工具类

def menu():

print("""

*********************欢迎使用员工管理系统************************

1.登陆系统------>显示菜单

2.显示二级菜单

3.显示菜单中功能按钮

4.角色管理(增删改查)

5.用户管理(增删改查)

6.权限管理(维护用户的操作权限)

    """)

option=input("请选择*")

option_str=re.sub("\D","",option)

if option_strin ["1","2","3"]:

option_int=int(option_str)

if option_int==1:

login()

elif option_int==2:

showMenu()

elif option_int==3:

show_btn()

def login():

"""

mysql查询返回的是元组  工作中常用的思想:使用面向对象

所以需要把使用的数据封装为数据

    :return:

"""

    print("****************登录功能*****************")

u_name=input("请输入登陆名字*")

u_pwd=int(input("请输入登录密码*****"))

db=RBACDesign("39.98.39.173",13306,"root","root","emp")

sql="select * from user where u_name = %s and u_pwd = %s"

    #判断一下在控制台输入的名字和数据库中的名字是否一致

    params=[u_name,u_pwd]

result=db.get_one(sql,params)

#实例化对象用户类获得用户的属性和值

    user=User(result[0],result[1],result[2],result[3])

print(user)

if result:

print("用户名密码输入正确,登陆成功!")

print("是否显示主菜单?")

flag=input("请选择输入(y/n)*")

if flag=="y":

showMenu(user)

else:

print("不显示菜单*****")

else:

print("用户名或者密码错误, 登陆失败!")

"""往数据库中增加数据

sql="insert into user(u_name,u_pwd) values (%s,%s)"

params=[username,password]

num=db.get_execute(sql,params)

if num >= 0:

print("登陆成功*")

else:

print("登陆失败*")"""

def showMenu(user):

print("***展示当前用户的角色以及可访问的菜单功能***")

# if user is None:

#    print("首先登录再访问")

# else:

#    print("该用户的角色(1.主任角色 2.讲师角色):",user.u_r_id)

#根据用户id来显示当前角色可以访问那些菜单角色和模块的关联表

    sql="select r.r_name,m.m_name,m.m_icon,m.m_href,m.m_level,rm.quanxian,m.m_pid from role r,modules m,role_modules rm where rm.r_id=r.r_id and rm.m_id=m.m_id and r.r_id=%s"

    params=[user.u_r_id]

db=RBACDesign("39.98.39.173",13306,"root","root","emp")

result=db.get_all(sql,params)

#print(result)  #展示的是当前角色和访问的菜单

#('讲师', '订单管理', '4.jpg', '/order', 3, 15, 1)

#('讲师', '管理员管理', '5.jpg', '/admin', 4, 7, 1)

    menu_list=[]

for itemin result:

print(item)

rm=R_M(r_name=item[0],m_name=item[1],m_icon=item[2],m_href=item[3],r_level=item[4],quanxian=item[5],m_pid=item[6])

menu_list.append(rm)

print(menu_list)#当前用户可访问的所有模块对象

#查看每个菜单中的功能按钮!

    for itemsin menu_list:

print("角色* %s,可访问的菜单路径是* %s,权限代码是* %s" % (items.r_name,items.m_href,Change(items.rm_quanxian)))

#1.表示增加 2.表示删除 4.表示修改 8.表示查询

        Change(items.rm_quanxian)

def show_btn():

print("显示菜单中的功能按钮**********")

if __name__ =='__main__':

menu()

二 * ** * 员工数据库设计表

数据库名称为emp 表格内容如下*

用户表user
角色表rrole
公司表company
部门表depart
员工表employee
模块表菜单表modules
角色表模块表role_modules

项目主要注意功能*

用户模块功能

·  登录

·   注册

     ·   查询个人信息

·   可以进行修改用户信息

会员管理模块

·  增加会员

 ·  删除会员

 ·  修改会员

 ·  开启或者禁用会员

 ·  批量查询会员

 ·  根据时间段查询会员信息

 ·  根据名称来查询会员信息

重点 :权限控制

扩展:管理员的管理模板

管理员列表

角色管理【添加角色/删除角色/修改角色/批量处理查询】

模块/菜单管理【添加菜单/修改菜单/调整顺序 order by  desc】

当前项目的两个角色:角色一* 管理员 角色二* 会员

              超级管理员  马云   --------登录后可以看到里面的所有菜单   ------- 也同样能看到所有功能按钮      (增删改批量操作)

            普通管理员   admin    --------登录后可以看到所有菜单 只能看到增删改3个功能按钮 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342