zoukankan      html  css  js  c++  java
  • 20150403--RBAC+首页登录-01

    image

    目录

    一、项目分析 1

    二、权限管理 1

    三、网站布局,布局完成首页 4

    四、完成管理员登陆 7

    五、权限管理的设置 12

    1、添加权限 12

    2、权限列表 15

    3、修改权限 15

    4、删除权限 19

    一、项目分析

    模型管理

    栏目管理,(使用无限极分类)

    内容的添加,(根据模型里面附加表的字段,自动生成表单)

    RBAC(管理员管理,角色管理,权限管理)  

    使用Tp框架来完成开发,

    二、权限管理

    想想一个项目有后台和前台,后台一般有一个超级管理员,超级管理员有一切的权限,可能还有一些普通的管理员,普通的管理员有属于自己的权限,在操作时,只能操作自己所属的一些权限功能。

    实现方式一:

    直接给普通管理员授予权限,在操作时验证是否有权限执行该操作。

    wps9095.tmp

    比较适合于管理员比较少的情况下,如果管理员比较多,则不容易分配权限。

    实现方式二

    基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。

    wps9103.tmp

    RBAC的要求:

    有一个超级管理员,在建表的时候就创建好了的,不属于任何角色,有所有的权限。

    普通的管理员在登录时,要根据自己的权限生成左侧的按钮,如果没有该权限则就不显示。

    权限就是按钮。

    建表来实现RBAC

    权限表  it_privilege

    需要的字段,权限名称,执行的地址  子权限, 使用无限极分类

    create database itcms;

    use itcms;

    #权限表

    create table it_privilege(

            id tinyint unsigned primary key auto_increment,

            priname varchar(32) not null comment '权限的名称',

            parent_id tinyint unsigned not null default 0 comment '父级权限的id',

            controllername varchar(32) not null default '' comment '对应控制器的名称',

            actionname varchar(32) not null default '' comment '对应方法名称'

    )engine myisam charset utf8;

    角色表:it_role

    需要的字段,角色的名称

    #角色表

    create table it_role(

            id tinyint unsigned primary key auto_increment,        

            rolename varchar(32) not null default '' comment '角色名称'

    )engine myisam charset utf8;

    分析:权限表和角色表的关系,

    一个角色里面是否有多个权限?答是,

    一个权限是否属于多个角色呢?答是

    因此两张表之间的关系是多对多的关系。

    #建立角色权限的中间表 it_role_privilege

    create table it_role_privilege(

            role_id tinyint unsigned not null comment '角色的id',

            pri_id tinyint unsigned not null comment '权限的id',

            key (role_id),

            key (pri_id)

    )engine myisam charset utf8;

    #管理员表,it_admin

    需要的字段,管理员名称  密码     

    create table it_admin(

            id tinyint unsigned primary key auto_increment,

            username varchar(32) not null comment '管理员名称',

            password char(32) not null comment '管理员密码',

            salt  varchar(12) not null comment '密码的密钥'

    )engine myisam charset utf8;

    #salt;在添加管理员的时候,是随机生成的。

    #密码的生成方式:md5(md5(password).salt)

    #添加一个超级管理员,明文的密码是admin

    insert into it_admin values(null,'admin','b3cd5411e88a1dd546521b0c6f75c9e4','serfs2');

    #管理员和角色表

    create table it_admin_role(

            admin_id tinyint unsigned not null comment '管理员的id',

            role_id tinyint unsigned not null comment '角色的id',     

            key (admin_id),

            key (role_id)

    )engine myisam charset utf8;

    五张表之间的关系;

    wps9152.tmp

    三、网站布局,布局完成首页

    使用tp框架,3.1.3版本,

    1、新建一个虚拟主机,完成项目的文件的配置布局

    wps928C.tmpwps929C.tmpwps92DC.tmpwps92DD.tmpwps92DE.tmpwps92DF.tmpwps92EF.tmpwps92F0.tmpwps942A.tmp

    2、在项目的根目录下面新建入口文件,完成一些配置。

    wps94E6.tmp

    3、新建一个首页的控制器(IndexAction.class.php),并添加如下方法

    wps9545.tmp

    4、把控制器中的方法对应的静态页面拷贝过来。

    wps9575.tmp

    5、把静态页面使用的图片样式js拷贝到根目录下面的Public目录下面。

    wps9586.tmp

    wps9596.tmp5、打开index.html left.html top.html main.html完成样式图片js路径的替换

    wps9643.tmp

    wps9654.tmp

    使用:__PUBLIC__解析成如下:

    wps9664.tmp

    修改index.html页面,在框架集中调用控制器中的方法引入静态页面。

    wps96F2.tmp

    路径规则可以单独配置。

    wps9741.tmp

    6、配置网站的数据库

    wps97EE.tmp

    四、完成管理员登陆

    1、创建一个登陆的控制器,并添加登录方法,并拷贝对应的模板,并完成模板样式路径的替换。

    wps980E.tmp

    2、在登录页面添加一个验证码

    (1)在登录的控制器中添加一个方法,用于生成验证码

    wps984E.tmp

    (2)在login.html页面完成验证吗的显示,并完成修改表单

    wps986E.tmp

    3、数据验证,在管理员登录时,要进行数据验证,和验证码验证

    数据验证:需要验证的规则:

    验证管理员名称不能为空

    管理员密码不能为空,

    验证码不能为空

    验证码是否正确

    (1)因为验证的管理员和密码是和admin表相关的。要建立一个admin的模型。

    在admin模型里面自己定义一个验证规则,

    wps987F.tmp

    wps98BE.tmpwps98CF.tmpwps98D0.tmpwps98D1.tmpwps98D2.tmpwps998E.tmp

    (2)在login控制器中login方法中进行数据验证,

    wps9AD7.tmp

    wps9AE8.tmpwps9AE9.tmpwps9B09.tmp

    (3)在admin模型中添加一个登陆验证的一个方法

    wps9BE5.tmp

    (4)登陆验证测试,登陆成功后,跳转到后台首页

    wps9C44.tmp

    4、如果用户没有登陆,则无法访问后台的页面,要求用户必须登录后,才能访问后台页面

    定义一个父类控制器,父类里面有一个验证是否登录的方法,其他的控制器继承该控制器,其他控制器在执行某个操作时,则要执行验证登录的方法。

    _initialize方法会在所有操作方法调用之前首先执行,该方法在构造函数里面执行,

    wps9C64.tmp

    在MyAction控制器中的_initialize方法中定义验证是否登录。

    wps9D9D.tmp

  • 相关阅读:
    k8s学习
    k8s学习
    k8s学习
    Linux 常用命令(持续补充)
    通过一个小故事,理解 HTTPS 工作原理
    Spring Cloud 微服务架构全链路实践
    Spring Cloud Eureka 使用 IP 地址进行服务注册
    RabbitMQ 消息顺序、消息幂等、消息重复、消息事务、集群
    Spring Boot 实现 RabbitMQ 延迟消费和延迟重试队列
    RabbitMQ 集群原理和完善
  • 原文地址:https://www.cnblogs.com/lifushan/p/5471846.html
Copyright © 2011-2022 走看看