cls certificate.php,权限控制类(cls_access.php)

94hwan框架的权限控制方式主要通过利用 cls_access 拦截ct和ac信息来实现,在项目内部,代码如下:

$config_pool_name='administrator';//应用池参数(与权限管理有关)

$config_appname='admin';//应用名称(与模板文件夹有关,不一定与应用池名称一致)

$config_cp_url='?ct=index&ac=login';//用于未登录用户跳转到的url

//前置的权限控制器

$config_access_ctl= cls_access::factory($config_pool_name,$config_cp_url);

$config_access_ctl->test_purview( cls_request::$forms['ct'], cls_request::$forms['ac'],'1');

这需代码需要在入口文件(通常是 index.php)execute_ctl 之前放置,

如果要进行一些特殊操作,如:用户未审核需要进行一些警告或不允许登录,也可以通过cls_access的对象实例,获取用户信息后在这个入口文件进行处理。

使用  cls_access::factory 初始化对象实例后,会保留一个引用的副本在 public static $accctl,项目内部可以用:

$acc_ctl = cls_access::get_instance();

这种方式来获得这个对象实例

一、cls_access 主要功能及成员函数如下:

1、public function check_user($loginuser, $loginpwd, $keeptime=0)

用于验证用户登录(通常用于登录程序),如:

$accctl= cls_access::get_instance();$rs=$accctl->check_user(cls_request::item('username'), cls_request::item('password'));

$gourl= cls_request::item('gourl','');

if($rs== 1 )

{

$jumpurl=emptyempty($gourl) ?"?ct=".cls_request::item('oldct')."&ac=".cls_request::item('oldac') :$gourl;

cls_access::show_message ('成功登录','成功登录,现在转向你在登录前访问的页面!',$jumpurl);

exit();

}else{

cls_access::show_message ('登录失败','可能密码或用户名不正确,请重新进行登录!', '-1');

exit();

}

2、public function test_purview($mod, $action, $backtype='1')

测试用户是否对当前操作有权限

$backtype =  1 表示没有权限时,由权限类直接处理验证登录后的位置

$backtype =  2 任何情况都只返回状态码,由用户自行处理

3、public function get_userinfos()

获得用户的个人信息(仅是 users 表的内容)

4、public static function show_message ($title, $msg, $gourl, $limittime=3000)

显示一个简单的对话框,等同于:cls_msgbox::show($title, $msg, $gourl, $limittime);

5、public function loginout()

退出登录(仅删除登录会话信息,不理会后续操作)

6、public static function factory($poolname, $cp_url='')

用工厂的方法创建对象实例

$poolname 是指用户的应用池(配置文件在 config/inc_accesscontrol.php)

$cp_url  是用户超时或未登录转到的地址(即是相当于 $acc_pools[$poolname]['control'] )

7、public static function get_instance()

获得由工厂方法创建的对象实例副本

8、public static function get_login_infos($uid)

获得指定用户的上次登录IP和时间

二、关于权限类的相关配置及原理

权限类的原理很简单,在没指定任何配置的情况下,用户是没有任何权限的,因此只需要配置文件指定用户能访问那些控制器和事件,即可达到权限控制的目的,这里涉及几个配置。

1、池权限配置

池权限的配置是一个整体的配置,用于标识项目中有多少个隔离的应用池

配置文件为:config/inc_accesscontrol.php

下面是一个标准的配置:

//组类型

$config['access_groups'] =array(

'administrator_admin'=>array('name'=>'管理员--超级管理员','pools'=>'administrator'),

'administrator_test'=>array('name'=>'管理员--测试组','pools'=>'administrator'),

'member_normal'=>array('name'=>'网站会员--普通会员','pools'=>'member')

);

//管理员应用池

指定这个应用池的用户能否访问其它应用

//$acc_pools['administrator']['allowpool'] = array('member');

$acc_pools['administrator']['allowpool'] ='';

在用户未登录的情况下可以访问的应用(通常是登录、注册、取回密码之类)

$acc_pools['administrator']['allowmod'] =array('index-login','index-dologin','index-loginout');

认证模式(session或cookie)

$acc_pools['administrator']['auttype'] ='session';

登录页地址

$acc_pools['administrator']['control'] ='?ct=index&ac=login';

//会员应用池

$acc_pools['member']['allowpool'] ='';

$acc_pools['member']['allowmod'] =array('index-login','index-dologin','index-loginout','index-register',

'index-doregister','index-get_password','index-test_userid');

$acc_pools['member']['auttype'] ='session';

$acc_pools['member']['control'] ='?ct=index&ac=login';

2、组限配置

组权限配置文件在 config/inc_accesscontrol_groups.php

//各用户组的具体许可权限

global$acc_groups;

$acc_groups=array();

//@start_config 不要改动下面<>结构

#

$acc_groups['administrator']['admin'] ='*';

$acc_groups['administrator']['test'] ='*';

$acc_groups['member']['normal'] ='*';

#

在 users 表中的 groups 实际上是 administrator_admin 这样的值,当 $acc_geoups 的配置值为 * 时表示可访问当前池的任何应用

否则用 "ctvalue1-acvalue1, ctvalue2-acvalue2..."这样的形式表示用户可访问的具体操作。

如果你想对某用户设置单独的权限,只需把类似的值保存到 users_purview 表即可

至于在后台的具体操作,只是对这个类的配置更改的实现而已,具体还要需符合这个类的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值