本帖最后由 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() 这些函数搞定用户验证,而不必使用它。
|