码迷,mamicode.com
首页 > 其他好文 > 详细

20150403--RBAC+首页登录-01

时间:2016-05-08 22:28:13      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

 

目录

一、项目分析 1

二、权限管理 1

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

四、完成管理员登陆 7

五、权限管理的设置 12

1、添加权限 12

2、权限列表 15

3、修改权限 15

4、删除权限 19

一、项目分析

模型管理

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

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

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方法中定义验证是否登录。

技术分享

20150403--RBAC+首页登录-01

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!