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

[程序 App] CodeIgniter2.0.2与fx_auth权限控制无缝完美整合处女版打包下载

    [复制链接]
发表于 2011-6-9 17:53:38 | 显示全部楼层 |阅读模式
本帖最后由 008shanke 于 2011-6-15 10:16 编辑

CodeIgniter2.0.2与fx_auth权限控制无缝完美整合处女版打包下载

简单说明:适合于CodeIgniter2.0.2,是小企业使用的权限利器

下载: CodeIgniter2.0.2与fx_auth权限控制无缝完美整合处女版打包下载.zip (657.11 KB, 下载次数: 1317)

安装时需要修改的主要配置文件 : config  和 database  基本配置等,还有邮件验证等自己摸索,我就不多说了 !

设置的项目:   encryption_key ='根据自己的需要'参数!

CodeIgniter fx_auth 插件的主函数和事件是在前辈那里拷贝修改的如果那里有错误请谅解和提出来谢谢!

要玩玩这个你可以打开:

{你的 CI URL}/auth/login/ 登录。
{你的 CI URL}/auth/logout/ 退出。
{你的 CI URL}/auth/register/ 注册。
{你的 CI URL}/auth/forgot_password/ 使用忘记密码功能。
{你的 CI URL}/auth/change_password/ 在你登录后修改密码。
{你的 CI URL}/auth/cancel_account/ 在你登录后把帐号自杀。
要访问管理员控制面板(你需要以管理员身份登录或者你的用户角色已经授权给了权限表):

{你的 CI URL}/backend/users/ 管理用户。
{你的 CI URL}/backend/unactivated_users/ 管理未激活用户
{你的 CI URL}/backend/roles/ 管理角色。
{你的 CI URL}/backend/uri_permissions/ 管理URI权限。
{你的 CI URL}/backend/custom_permissions/ 管理自定义权限。
通常,{你的 CI URL} 就是在你 CI 配置文件中 'base_url' 和 'index_page' 项的组合。
事件

事件是 Fx_Auth 库中的特定函数被调用时触发的函数。要使用这些事件你需要打开 'libraries/DX_Auth_Event.php',放上你的代码。
下面就是你可以在 Fx_Auth  库中可以用到的事件。
user_activated($user_id)


如果配置中的 'email_activation' 值为 TRUE,此事件就会在用户通过他们E-mail中收到的密钥成功激活后发生。
如果配置中的 'email_activation' 值 为 FALSE,此事件就会在用户成功注册后发生。
$user_id 是被激活用户的ID。
默认情况下,这儿会有创建用户档案的代码。如果你不需要用户档 案,你可以删除这些代码。
user_logged_in($user_id)
此事件在用户登录后发生。$user_id 是登录用户的ID。
user_logging_out($user_id)
此事件在用户退出前发生。$user_id 是退出用户的ID。
user_changed_password($user_id, $new_password)
此事件在用户修改密码后发生。$user_id 是修改密码用户的ID,$new_password 是新的密码。
user_canceling_account($user_id)
此事件在用户帐号被自杀前发生。$user_id 是要被自杀的帐号ID。
默认情况下,这儿会有删除用户档案的代码。如果你不需要用户档 案,你可以删掉这些代码。
checked_uri_permissions($user_id, &$allowed)
此事件在 DX_Auth 中的 check_uri_permissions() 函数被调用时发生。在检查过用户角色是否被授权访问 URI 后,此事件将被触发。
$allowed 是在执行检查之前的结果,由于它是以引用传递的,它的值是可以修改的。
got_permission_value($user_id, $key)
此事件在 DX_Auth 中的 get_permission_value() 被调用时发生。
got_permissions_value($user_id, $key)
此事件在 DX_Auth 中的 get_permissions_value() 被调用时发生。
sending_account_email($data, &$content)
此事件在 dx auth 发送带有帐号信息的邮件之前发生。
$data 是一个数组,包含 username, password, email, 和 last_ip。
$content 是E-mail内容,以引用传递。
默认情况下那儿有关于怎样创建内容的示例代码。你可以修改它以适 合你的需求。
sending_activation_email($data, &$content)
此事件在 dx auth 发送激活邮件之前发生。
$data 是一个数组,包含 username, password, email, last_ip, activation_key, activate_url。
$content 是E-mail内容,以引用传递。
默认情况下那儿有关于怎样创建内容的示例代码。你可以修改它以适 合你的需求。
sending_forgot_password_email($data, &$content)
此事件在 dx auth 发送重设密码邮件之前发生。
$data 是一个数组,包含 password, key, 和 reset_password_uri。
$content 是E-mail内容,以引用传递。
默认情况下那儿有关于怎样创建内容的示例代码。你可以修改它以适 合你的需求。
get_permission_value($key, $check_parent = TRUE)
通过 指定的键获取权限值。只在用户已登录后才可调用此函数。
$key 是权限数组键(注意:权限在表中是以数组存储的)。
如果 $check_parent 为 TRUE 意味着如果权限值在用户角色中没有找到,它将尝试获取父角色的权限值
如果权限找到返回其值,否则返回 NULL 。
要设置权限,你必须使用在权限模型中指定的函数,或者自己编写。 请查看关于设置权限的示例。
注意:使用此函数是可选的, 或许你完全可以手动检查用户权限,并使用 is_admin(), is_role() 这样的函数手动搞定权限,而不必使用它。
get_permissions_value($key, $array_key = 'default')
通过 指定的键获取那些权限的值。只在用户已登录后才可调用此函数。
此函数将在用户权限和父权限中搜索键。
$key 是权限数组键 (注意:权限在表中是以数组存储的)。
$array_key = 'default'. 返回以 0,1,2 作为键值排列的数组。
$array_key = 'role_id'. 返回以 role_id 作为键值排列的数组。
$array_key = 'role_name'. 返回以 role_name 作为键值排列的数组。
如果权限找到,返回包含其值的数组,否则返回 NULL。
要设置权限,你必须使用在权限模型中指定的函数,或者自己编写。 请查看关于设置权限的示例。
注意:使用此函数是可选的, 或许你完全可以手动检查用户权限,并使用 is_admin(), is_role() 这样的函数手动搞定权限,而不必使用它。
deny_access($uri = 'deny')
调用 此函数将把用户重定向到 $uri 变量设定的值。默认 $uri 为 'deny'。
$uri = 'deny' 将重定向用户到 dx_auth 配置文件中指定的 'DX_deny_uri' 值。
$uri = 'login' 将重定向用户到 dx_auth 配置文件中指定的 'DX_login_uri' 值。
$uri = 'banned' 将重定向用户到 dx_auth 配置文件中指定的 'DX_banned_uri' 值。
catpcha()
创建 一个用于表单验证的图片验证码。
get_catpcha_image()
获取 创建的HTML图像。请在视图中使用这个函数。
is_captcha_expired()
检查 创建的验证码是否已过期。请在表单验证回调函数中使用这个函数。
is_captcha_match($code)
检查 创建的验证码文本是否与 $code 匹配。请在表单验证回调函数中使用这个函数。
reCAPTCHA 函数
(译注:一系列用于英文验证码的函数,可以有声音验证,中文网站怕是很少用到, 先不翻译了。感兴趣的朋友请查看原文)

评分

参与人数 4威望 +20 收起 理由
Trail + 5 很给力!
snllll + 5 文档认真细致,作者有心了,赞!.
benfeng + 5 相当不错!!
Hex + 5 很给力!

查看全部评分

发表于 2014-6-11 18:57:59 | 显示全部楼层
有深度的技术贴,收藏有时间研究下,谢谢分享!
 楼主| 发表于 2011-6-9 17:58:48 | 显示全部楼层
本帖最后由 008shanke 于 2011-6-15 10:28 编辑

CodeIgniter Fx_Auth 插件用户手册 - 函数参考

主要函数
下面是你可以在 Fx_ Auth 库中可以使用的函数列表。

login($login, $password, $remember = TRUE)
登录 用户。如果登录成功,返回 TRUE ,否则 FALSE。
$login 是用户名或E-mail地址或者两者均可,取决于 Fx_ Auth 配置文件中的设置。
$password 是用户密码。
$remember 是使用户下次打开网站时仍记住用户(“记住登录”)。
如果函数返回 FALSE 你可以使用 get_auth_error() 函数返回一错误字符串。
logout()
注销 用户。
register($username, $password,$email)
注册 新用户。如果注册成功,返回新用户记录,否则返回 FALSE。
如果 dx_auth 配置文件中 email_activation 的值为 TRUE ,那么它将发送E-mail验证,并要求用户验证帐号。
如果 dx_auth 配置文件中 email_activation 值为 FALSE 且 email_account_details 值为 TRUE ,那么它将通过E-mail发送用户帐号信息。
此函数将自动设置新用户角色ID ( role_id )为 1,所以你需要确保有 id = 1 的记录在角色表中,它的name字段值是类似“普通用户(normal user)”这样的。
forgot_password($login)
发送 一封带有密钥的邮件以重置他们的密码。如果成功则返回 TRUE, 否则返回 FALSE。
$login 是用户名或E-mail。
由于密码是单向加密的,不可能得到原值。这就是我们需要重置它的 原因。
如果函数返回 FALSE ,你可以使用 get_auth_error() 函数返回一错误字符串。
reset_password($username, $key = '')
基于 用户名和密钥重设密码。通常和 forgot_password() 函数搭配使用。如果成功返回 TRUE 否则返回 FALSE。
activate($username, $key = '')
基于 用户名和密钥激活用户。在 dx_auth 配置文件中 email_verification 设置为 TRUE 的前提下,它常用于在注册后激活用户帐号。
change_password($old_pass, $new_pass)
修改 当前已登录用户的密码。调用此函数前请确保你已经检查用户成功登录了。成功返回 TRUE,失败返回 FALSE。
如果函数返回 FALSE ,你可以使用 get_auth_error() 函数返回一错误字符串。
cancel_account($password)
从数 据库删除当前已登录用户的帐号。调用此函数前请确保你已经检查用户成功登录了。 成功返回 TRUE,失败返回 FALSE。
如果函数返回 FALSE ,你可以使用 get_auth_error() 函数返回一错误字符串。
get_user_id()
返回 用户 ID,只在用户已登录后可用。
get_username()
返回 用户名,只在用户已登录后可用。
get_role_id()
返回 用户角色 ID,只在用户已登录后可用。
get_role_name()
返回 用户角色名,只在用户已登录后可用。
is_admin()
检查 用户是否为管理员,只在用户已登录后可用。
当用户的角色 ID 和 角色(roles)表中 name 字段值为'admin'(不分大小写)的那行记录的 role_id 字段的值相同,函数将返回 TRUE。
is_role($roles = array(), $use_role_name = TRUE, $check_parent = TRUE)


检查 用户是否有 $roles 权限。
如果 $use_role_name = TRUE 则 $roles 是类似于 '管理员','编辑','等' 的权限名,否则 $roles 是类似于 0, 1, 2 的 role_id 。
如果 $check_parent 为 TRUE 意味着如果此角色在用户角色中没有找到,它将检查父角色中是否有那个用户角色。
你可以在 $roles 参数中传递一个数组或者一个字符串。
示例:
if ($this->fx_auth->is_role('admin'))
{
    // Do something
}

if ($this->fx_auth->is_role(array('admin', 'moderator'))
{
    // Do something
}

// Using an Role ID as $roles parameter
if ($this->fx_auth->is_role('1', FALSE))
{
    // Do something
}

if ($this->fx_auth->is_role(array('1', '2'), FALSE))
{
    // Do something
}

is_logged_in()
检查 用户是否已登录。
is_banned()
检查用户是否为一个被踢用户。
你应该在调用 login() 函数后才调用这个函数。这样如果 login() 函数返回 FALSE,你可以检查用户是被踢了还是未使用这个函数。
get_ban_reason()
取得 被踢用户的被踢原因。
你应该在调用 login() 函数后才调用这个函数。这样如果 login() 函数返回 FALSE,且用户已被踢,你可以使用这个函数取得原因。
is_username_available($username)
通过 在数据库中查询确认没有相同的用户名,检查用户名是否可用。此函数常用于表单验证的回调函数中。
is_email_available($email)
通过 在数据库中查询确认没有相同的E-mail,检查E-mail是否可用。此函数常用于E-mail表单验证的回调函数中。
get_auth_error()
当 login(), forgot_password(), change_password(), cancel_account() 函数返回失败时,取得一个错误信息。
is_max_login_attempts_exceeded()
检查 登录尝试次数是否超过了在 dx_auth 配置文件中指定的值。
登录次数的增长通过登录 IP 识别。
check_uri_permissions($allow = TRUE)
这个 将检查当前登录的用户是否允许访问当前 URI,基于他所属的角色,或者他的父角色。
下面是当你调用这个函数时将会发生的细节:
首先,函数将检查用户是否已登录,如果用户还没登录,它将重定向到登录 URI。
但如果用户已登录,它将检查用户是否为管理员(admin)。
如果用户是管理员,它将允许访问这个URI。
但如果用户不是管理员,它将检查用户所属角色或父角色是在数据库权限表中否有访问当前URI的权限。
如果用户被禁止,它既爱那个重定向到禁止访问的URI。
你可以在控制器构造器中调用 check_uri_permissions() 以保护整个控制器:
class Home extends Controller  
{
    function Home()
    {
        parent::Controller();

        $this->fx_auth->check_uri_permissions();
    }
}  

或者在一个函数中使用它:
function hello_world()
{
    $this->fx_auth->check_uri_permissions();
     
    // Do something
}

实例:
有一个用户 role_id = 1 (普通用户 normal user).
权限表中,有一个指定 了 role_id = 1 的记录,它有 '/test/'  URI 的 URI 访问权限。
现在这个用户想要访问 '/test/hi/'。
如果你在 Test 控制器中有这样的代码:
class Test extends Controller  
{
    function Test()
    {
        parent::Controller();
         
        // Secure controller
        $this->fx_auth->check_uri_permissions();
    }
     
    function hi()
    {
        echo 'Hi';
    }
     
    function hello()
    {
        echo 'Hello';
    }
}  

这个用户将会通过检查并访问'/test/hi/' URI,会显示 'Hi' 。
因为如果权限 URI 设置为 '/test/',意味着对Test类和它下面所有方法函数授权。
如果你想只对函数限制访问,你可以在设置权限 URI 时指定 '/class/function/'
例如,在上面的实例中,如果你把 role_id = 1 的URI权限设置为'/test/hi/',用户将可以访问'/test/hi/' URI,但不能访问'/test/hello/' URI。
你也可以设置 URI 权限为 '/' ,以打开对所有 URI 的访问权限。
也可以通过在调用 check_uri_permissions() 时指定 $allow = FALSE (译注:此处原文为 TRUE,应该是有误)以反转前面所有的解释。
这样它将会在 URI 权限找到时禁止用户访问URI ,而不是在 URI 权限找到时允许用户访问 URI。
要设置 URI 权限,你必须使用在权限模型中给出的函数,或者使用你自己的。请查看关于设置权限的示例。
CL Auth 用户请注意,URI 权限现在的格式重命名为 '/class/function/' ,取代了 '/class/function'
继承
如果用户角色有一个父角色,那用户也有到父角色的权限,等等。要阐述这个,让我们先来看一下这个 URI 权限图解:
User
{
'/home/'
'/help/'
}

Moderator: User
{
'/moderator/'
}

Super_Moderator: Moderator
{
'/super/'
}

Big_Moderator: Moderator
{
'/big/'
}

这意味着,Super_Moderator 角色可以访问 Moderator 和User 的 URI,但不能访问 Big_Moderator 的 URI。
要使用这个特性,你需要在角色表中为每个角色中的 parent_id 指定一个父角色。
这是前面的示例用到的角色表结构。
id  parent_id  name
-------------------------
1    0    User
2    0    Admin
3    1    Moderator
4    3    Super Moderator
5    3    Big Moderator


注意,这个功能是可 选的,或许你完全可以使用 is_admin(), is_role(), is_logged_in() 这些函数搞定用户验证,而不必使用它。

发表于 2011-6-9 18:08:47 | 显示全部楼层
研究研究
发表于 2011-6-9 18:09:42 | 显示全部楼层
占位符{:soso_e121:}留记号
发表于 2011-6-9 18:13:24 | 显示全部楼层
本帖最后由 mvc999 于 2011-6-9 18:23 编辑

刚刚发了求助信号就有人发布这个玩意感谢感谢啊! 好东西越来越多
发表于 2011-6-9 23:02:20 | 显示全部楼层
学习学习
发表于 2011-6-10 00:14:48 | 显示全部楼层
很给力啊
发表于 2011-6-10 09:06:24 | 显示全部楼层
这运行不通过呀,登录都登录不进去。而且里面还用<?= ?>这种方式,我还得修改为<?php ?>这种方式才可以运行登录界面,但最终没登录成功,晕死。
发表于 2011-6-10 18:00:06 | 显示全部楼层
o(∩_∩)o 哈哈,又有玩具可以玩了~
发表于 2011-6-10 19:18:01 | 显示全部楼层
大致看了下,关于编辑、删除这两个权限是单独给权限的。  有个疑问,想请教下:
假设有一个页面内,有三处编辑分别标记为ABC、三处删除分别标记为为abc,分别在该页面三个位置,现在我希望甲用户可以使用(编辑AB)(删除bc)的功能,乙用户可以用(编辑BC)(删除abc)的功能,不知道能否实现。

本版积分规则