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

原文地址:https://www.cnblogs.com/lifushan/p/5471846.html