用户
 找回密码
 入住 CI 中国社区
搜索
查看: 11840|回复: 11
收起左侧

[权限控制] 请教关于权限控制

[复制链接]
发表于 2008-2-15 17:13:00 | 显示全部楼层 |阅读模式
接触过一些php 框架,fleaphp有一个rbac,ZF有一个ACL,不知道CodeIgniter怎么解决用户的权限控制问题的,在手册里没看到,特此请教大家。
发表于 2008-2-15 17:38:58 | 显示全部楼层
CI 是通过第三方库实现的,因为 CI 和你提到的那几个框架不太一样,CI是轻量级框架,给你提供足够的灵活性。
权限控制可以使用 FreakAuth 这个第三方库实现。(还有几种第三方库可供选择,我用的是这个 FreakAuth)
发表于 2008-2-15 17:39:30 | 显示全部楼层
自己写,或者用社区里有的一些第三方的。比方说FreakAuth等。
 楼主| 发表于 2008-2-15 17:52:37 | 显示全部楼层
感谢楼上2位解答,希望能有一个FreakAuth的详细点的说明就好了,呵呵。
发表于 2008-2-15 17:57:49 | 显示全部楼层
发表于 2008-9-24 02:50:36 | 显示全部楼层
FreakAuth_light 包包括:
----用户: login/logout
----用户:registration
----记住密码
----修改密码
----站点部分访问限制

后台的管理程序可以用来:
----管理用户
----管理管理员

安装:
----需要 CI1.5.x
----mysql 4.0 或更高

根据以下步骤来安装:
----1下载FreakAuth_light
----2解压到本地目录
----3拷贝FreakAuth_light目录下的文件到CI的对应目录
----4把config_demo.php,autoload_demo.php,routes_demo.php 改名并换掉CI config目录下的config.php,autoload.php,routes.php ,并对原来 的文件做好备份。
----5通 过导入FreakAuto_DB.sql来创建必要的表
----6访问installer控制器,在该页面你可以检查是否创建了数据表和完成了必要的设置
----7在config.php文件中,填写你的迷失
----8 确保tmp目录可写

//理解访问控制角色(和它们的层次关系)
FreakAuth_light 基于4个主要的默认角色:
    超级管理员   =>    能做任何事包括创建管理员
    管理员           =>     你可以设置让他们能做什么
    用户                =>      指注册用户,你可以选择一些请求允许他们访问
    来宾                =>      指未注册的用户
   
    *你还可以添加自己的(自定义)角色在 application/config/freakauth_light.php  $config['FLA_roles'] 部分
   
    注:角色的值设的越小,说明它的权限越高。
   
保护你的程序:
----在你的控制器中使用:
----$this->freakauth_light->check();
----用来限制不同角色的用户访问 控制器或控制器的Action
----它有两个可选参数:
----第一个参数可以用来指定用户组(如:admin)
----第二个参数用来限制是否只能是第一个参数指定的用户组才有访问的权限(非则表示,权限更高的用户组亦可访问)
示例:
$this->freakauth_light->check(); //表示登录的用户都可以访问,包括管理员和超级管理员等。
$this->freakauth_light->check('admin'); //表示只有admin 或比admin权限更高的用户才能访问。
$this->freakauth_light->check('admin',true);// 表示只能admin访问。

你可以在控制器的构造函数中或某个Action中使用check()方法。这个由你的情况而定,如果想限制整个控制器的所有Action的访问,那就放在构造函数中,否则就放到具体的Action中。
示例:略。


通过角色来控制访问:
有四个方法来做这项工作:
----1 isValidUser();
----2 isAdmin();
----3 isSuperAdmin();
----4 belongsToGroup();

前三个方法是涉及比较具体的(角色),而第四个方法更为通用(一般化)。
$this->freakauth_light->isValidUser();
如果FreakAuth系统没有工作或用户没有登录都将返回false,否则返回true

$this->freakauth_light->isAdmin();
....

$this->freakauth_light->isSuperAdmin();
....

$this->freakauth_light->belongsToGroup();
这个方法用来判断登录用户是否属于用户自定义的某个组。它有两个可选的参数:
第一个参数用来指定用户组
第二个参数用来指定用户是否只属于指定的用户组(如果设为false ,更高权限组的用户亦将返回true)
示例:略




图形验证码:
     需设置 tmp目录可写。public 及其子目录亦要求可写。
     
     可在 config/freakauth_light.php中自行设定是否需要给以下设定图形验证码:
     登录,注册,修改密码
     
     你也可以设 定是否使用大写字母,字母数字 或 字母数字特殊字符的混合形式。
     
     
怎样取得登录用户的信息:
  ----用户ID :$this->db_session->userdata('id');
  ----用户名:$this->db_session->userdata('user_name');
  ----用户组:$this->db_session->userdata('role');
  
  
  
  
  使用mod_rewrite
  在 .htaccess 文件中键入如下:
  
  <IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|public|tmp|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

将config.php中的$config['index_page']设为空, $config['index_page']='';


--------------------------------------------------------------------------------------------------------------------------
以上内容译自 FreakAuth_light 官方document ,并非直译,水平有限,不吝赐教。

评分

参与人数 1威望 +3 收起 理由
Hex + 3 精彩解答+精彩翻译

查看全部评分

发表于 2009-9-15 14:52:37 | 显示全部楼层
现在CI已经是1.7.2了,这个还能用吗?
发表于 2010-1-11 19:19:27 | 显示全部楼层
回复 7# larruping


    可以用的  就是要调试一下  里面有两个地方代码要做小的修改
发表于 2010-7-18 21:59:43 | 显示全部楼层
路过留言啦
发表于 2010-7-22 18:48:20 | 显示全部楼层
要对每个 控制器中的编辑 删除 加一个角色来对应,这个用起来挺不方便的吧?各位有什么好的方法没?

本版积分规则