PHP开发工程师@温州。博客关于:技术、生活、读书、互联网。

Sentry - PHP的身份及权限验证解决方案

简介

Sentry是一个简单而强大的身份及权限验证框架,提供了用户组、权限、自定义哈希算法及其他一些安全特性,致力于让开发者快速建立一个权限管理系统。

官网:https://cartalyst.com/manual/sentry

github:https://github.com/cartalyst/sentry


安装

Sentry可以方便的使用composer进行独立安装或集成到Laravel、CodeIgniter等框架。这里说下集成Sentry到Laravel4框架,其他方式的安装也都大同小异。

  1. 在composer.json配置文件中添加依赖:{"require": {"cartalyst/sentry": "2.1.*",},"minimum-stability": "stable"},然后执行composer update进行下载。

  2. 添加自动加载配置[app/config/app.php] ,将'Cartalyst\Sentry\SentryServiceProvider'添加到provider配置项中

  3. 添加别名配置[app/config/app.php],将'Sentry'=>'Cartalyst\Sentry\Facades\Laravel\Sentry'添加到aliases配置项中

  4. 添加数据库,php artisan migrate --package=cartalyst/sentry

  5. 最后注入配置 php artisan config:publish cartalyst/sentry


权限概述

介绍sentry的权限如何工作及用户权限的继承行为。

组权限有2种状态:0:禁止 1:允许
用户权限有3种状态 : -1:禁止 1:允许 0:继承


权限继承:

如果用户没有分配权限或用户分配权限为0,那么用户将会从组中继承。
如果用户分配的权限是1或-1,那么用户的权限会覆盖组权限。

如:

Moderator组
{
    "name" : "moderator",
    "permissions" : {
        "user.create" : 0,
        "user.delete" : 0,
        "user.view"   : 1,
        "user.update" : 1
    }
}

用户
{
    "id" : 2,
    "username" : "Rocky",
    "groups" : ["moderator"],
    "permissions" : {
        "user.update" : 0
    }
}

那么这里用户Rocky就拥有user.update和user.view的权限,而没有user.create和user.delete的权限。


sentry代码实例

简单演示如何使用sentry进行用户管理及权限验证

创建用户:
    $user = Sentry::createUser(array(
        'email'     => 'john.doe@example.com',
        'password'  => 'test',
        'activated' => true,
    ));
    // Find the group using the group id
    $adminGroup = Sentry::findGroupById(1);
    // Assign the group to the user
    $user->addGroup($adminGroup);


验证一个用户:

$credentials = array(
    'email'    => 'john.doe@example.com',
    'password' => 'test',
);
// Try to authenticate the user
$user = Sentry::authenticate($credentials, false);


修改一个组

     $group = Sentry::findGroupById(1);
    // Update the group details
    $group->name = 'Users';
    $group->permissions = array(
        'admin' => 1,
        'users' => 1,
    );

    // Update the group
    if ($group->save())
    {
        // Group information was updated
    }
    else
    {
        // Group information was not updated
    }


检查用户是否有权限

    $user = Sentry::findUserByID(1);
    // Check if the user has the 'admin' permission. Also,
    // multiple permissions may be used by passing an array
    if ($user->hasAccess('admin'))
    {
        // User has access to the given permission
    }
    else
    {
        // User does not have access to the given permission
    }


还有很多方法,这里就不一一举例了,大家可以参考官方文档。





评论

© yuankeqiang | Powered by LOFTER