目录
一、项目分析
模型管理
栏目管理,(使用无限极分类)
内容的添加,(根据模型里面附加表的字段,自动生成表单)
RBAC(管理员管理,角色管理,权限管理)
使用Tp框架来完成开发,
二、权限管理
想想一个项目有后台和前台,后台一般有一个超级管理员,超级管理员有一切的权限,可能还有一些普通的管理员,普通的管理员有属于自己的权限,在操作时,只能操作自己所属的一些权限功能。
实现方式一:
直接给普通管理员授予权限,在操作时验证是否有权限执行该操作。
比较适合于管理员比较少的情况下,如果管理员比较多,则不容易分配权限。
实现方式二
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。
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;
五张表之间的关系;
三、网站布局,布局完成首页
使用tp框架,3.1.3版本,
1、新建一个虚拟主机,完成项目的文件的配置布局
2、在项目的根目录下面新建入口文件,完成一些配置。
3、新建一个首页的控制器(IndexAction.class.php),并添加如下方法
4、把控制器中的方法对应的静态页面拷贝过来。
5、把静态页面使用的图片样式js拷贝到根目录下面的Public目录下面。
5、打开index.html left.html top.html main.html完成样式图片js路径的替换
使用:__PUBLIC__解析成如下:
修改index.html页面,在框架集中调用控制器中的方法引入静态页面。
路径规则可以单独配置。
6、配置网站的数据库
四、完成管理员登陆
1、创建一个登陆的控制器,并添加登录方法,并拷贝对应的模板,并完成模板样式路径的替换。
2、在登录页面添加一个验证码
(1)在登录的控制器中添加一个方法,用于生成验证码
(2)在login.html页面完成验证吗的显示,并完成修改表单
3、数据验证,在管理员登录时,要进行数据验证,和验证码验证
数据验证:需要验证的规则:
验证管理员名称不能为空
管理员密码不能为空,
验证码不能为空
验证码是否正确
(1)因为验证的管理员和密码是和admin表相关的。要建立一个admin的模型。
在admin模型里面自己定义一个验证规则,
(2)在login控制器中login方法中进行数据验证,
(3)在admin模型中添加一个登陆验证的一个方法
(4)登陆验证测试,登陆成功后,跳转到后台首页
4、如果用户没有登陆,则无法访问后台的页面,要求用户必须登录后,才能访问后台页面
定义一个父类控制器,父类里面有一个验证是否登录的方法,其他的控制器继承该控制器,其他控制器在执行某个操作时,则要执行验证登录的方法。
_initialize方法会在所有操作方法调用之前首先执行,该方法在构造函数里面执行,
在MyAction控制器中的_initialize方法中定义验证是否登录。