php源码_支持阅读权限控制和会员权限管理_实用PHP会员权限控制实现原理分析...

本文是对PHP权限的教程。非常实用。学习php的朋友可以参考下。

我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自chinaunix论坛,今天转过来看看。希望对大家有所帮助,对PHP100的朋友有个很高的提升。

/*

*控制访问表

* acl值 功能

* 1 需要登录

* 2 自身修改

* 4 需要组的权限集合

* 8 需要身份访问集合

* 16 身份被禁止访问

* 32 可访问的日期

* 64 可访问的周日

* 128 可访问的时间

* 256 输入密码才能访问

* 512 超级管理使用

*/

class aclACL extends acl {

public $routername="acl";

public $aclid='2'; //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问

public $roledisable=array(9); //禁用身份

public $pwd=123456; //密码访问 ACL->noPwd();

public $date=array('begin'=>0,'end'=>0); //允许日期之间

public $hours=array('begin'=>0,'end'=>0); //一日内小时区间

public $weeks=array('begin'=>0,'end'=>0); //一周内周一到周七

public $aclgroup=array("create"=>"4,45,8"); //create需要的组才能创建

public $aclrole=array("all"=>"6","create"=>"7,95,78"); //create需要的角色才能创建,该组需要ID为6的角色才能访问

public $acl=array("all"=>0,

"index"=>4, //表列4表示检查组的组合

"delete"=>1, //删除只登录后删除,当然呆以设置为2或4

"update"=>1, //更新提交只能登录后才能更新,在这里做也防止非法、post,edit是不能访问显示编辑内容页

"createForm"=>1, //也不能新提交数据库

"edit"=>0, //登录才显示编辑框

"show"=>0, //不用登录也能显示

"create"=>1); //创新表单需要登录操作 可以设置某个组才能创建

}

?>

这个是要认证的文件模块是acl

每当用户访问acl模块时候,如果开启了认证那么会调用这个类

然后这个类会根据$acl 的all或index等值去做认证检查。

把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相应的限制的。

比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组,

首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。

目前router可以自己根据情况开启用acl控制

方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){}

可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名

curdRouter类设置验证

class curdRouter extends controller{

//返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd

//可以不写这个函数,那么不会启用通用权限系统。

public function isAcl(){}

public function index()

{

$booktype=M("booktype");

$this->pager=C("pager");//取得分类

$this->pager->setPager($booktype->count(),10,'page');//取得数据总数中,设置每页为10

$this->assign("list",$booktype->orderby("bookid desc")->limit($this->pager->offset(),10)->fetch()->getRecord());

}

public function login(){ //登录页面

}

public function logout(){ //退出页面

MY()->logout(); //退出登录

redirect(url_for("guestbook/index"),"退出成功",3);

}

public function noAcl($mask) { //处理一下如果没有权限转向登录

redirect(url_for("guestbook/login"),"需要登录",3);

}

public function loginpost() { //登录提交地方 简单处理下登录认证

if($_POST['author']=='queryphp'&&md5($_POST['pwd'])==md5('123456'))

{

MY()->setLogin(); //设置登录状态

redirect(url_for("guestbook/adminlist"),"登录成功",3);

}

redirect(url_for("guestbook/login"),"登录失败",3);

}

/*

*登录信息基本类

*权限表可以缓存数据,登录时候恢复。

*/

class mybase {

public $options=array();

public $uid;

public $username;

public $isadmin;

public $role=array(); //我使用的身份

public $group=array(); //我所在组

public $grouprole=array(); //组的身份

public $mygroupMar=array(); //我拥有管理的组

public $mygroupOwn=array(); //属于我的组

public $acl=array(); //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid

public $groupacl=array(); //组拥用的控制权限

public $myacl=array(); //我的身份拥用的控制权限

public $loginfaild=0; //登录失败次数 如果超过这个数应该禁止IP登录几分种

这是基本

可以把myUser.class.php放在项目lib目录里面

复制代码使用MY()函数就可以取得myUser了。

4a75223c95613d5351d3396e7492ab28.gif

bee500e828671a2d3a004445b7a2633b.png

f18828a7c748f7fe1ff06144d50cf196.gif

bb136ff366c5dc285e15c533b58d3406.gif

65ae26d1c67e7f7717a70aa61b5e5b94.gif

c8a0aa1431bf7f492a28016978ddde09.gif

2cca39b52b8a54be7b77fd62459bbf15.gif

0cff5d10ded5a99b8aded3e2d4eb2ded.gif

f34533bc5eddf3cb922e91546b21c7b4.gif

e4e95aa7256ba0c2b0ec839c77c08da2.gif

86cff2e636594b5d1952c2fc6f743e3f.gif

6cfb6e074b3bee26d4fdad07e0133b39.gif

f6a4312d8fe44778f0eeb818aae6d23f.gif

c5c02e1b1983ff69f5fc33d8f9ba1b81.gif

687b6b8839213f67b9d1eae42172a8e6.gif

2585edc1e6b2064254caf37613acb735.gif

6e97614350465db329728a291c06f696.gif

382263b026129fe866c63ed9f90f6701.gif

6c4c40446d1f38658cca774bd2eb78b3.gif

4bd51f9a9849f99ace3ec935b96485c1.gif

e04b67a5acb87e88120f33a86c66f118.gif

127143cd77211ea4bbc1b14df7cf2345.gif

fbddb4cb98fe5a4f30d83b521371fc77.gif

e8731cde0dd40cb3a1cfffecd6d3cbe5.gif

51ed681648dacb0e3c8a6f55de1059eb.gif

86a2276a64fdbcaa36e6e2128a16d596.gif

可以看框架文件

project/router目录有一个guestbookRouter.class.php

在后台

65ae26d1c67e7f7717a70aa61b5e5b94.gif

取得guestbookRouter.class.php类名和方法。

然后给这些方法加权限

86a2276a64fdbcaa36e6e2128a16d596.gif

右边有一个应用权限,有一个取消权限,如果取消权限表示没有权限限制

也就是删除权限文件

应用权限 表示给这个类添加权限,会生成一个权限文件。

在project/router/acl/生成 guestbookACL.class.php文件

程序在加载guestbookRouter.class.php时候会检查有没有guestbookACL.class.php权限文件

有就使用权限检证,没有就没有。这样加减权限跟guestbookRouter.class.php文件入口没有一点改动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值