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个功能按钮 

你可能感兴趣的:(RBAC权限管理案例----员工管理项目)