zoukankan      html  css  js  c++  java
  • ThinkPHP的RBAC

    基于角色的访问控制(Role-Based Access Control)

    在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。

    ThinkPHP通过5张表实现权限控制

      think_user (用户表)

      think_role (用户分组表)

      think_node (操作节点)

      think_role_user (用户和用户分组的对应)

      think_access (各个操作和用户组的对应)

    认证过程

    1.判断当前模块的当前操作是否需要认证
    2.如果需要认证并且尚未登录,跳到认证网关,如果已经登录 执行5
    3.通过委托认证进行用户身份认证
    4.获取用户的决策访问列表
    5.判断当前用户是否具有访问权限

    配置config文件

    array(
            'APP_AUTOLOAD_PATH'=>'@.TagLib',
            'SESSION_AUTO_START'     =>true,
            'USER_AUTH_ON'              =>true,
            'USER_AUTH_TYPE'            =>1,        // 默认认证类型 1 登录认证 2 实时认证
            'USER_AUTH_KEY'             =>'authId',    // 用户认证SESSION标记
            'ADMIN_AUTH_KEY'            =>'administrator',
            'USER_AUTH_MODEL'           =>'User',    // 默认验证数据表模型
            'AUTH_PWD_ENCODER'          =>'md5',    // 用户认证密码加密方式
            'USER_AUTH_GATEWAY'         =>'/Public/login',// 默认认证网关
            'NOT_AUTH_MODULE'           =>'Public',    // 默认无需认证模块
            'REQUIRE_AUTH_MODULE'       =>'',        // 默认需要认证模块
            'NOT_AUTH_ACTION'           =>'',        // 默认无需认证操作
            'REQUIRE_AUTH_ACTION'       =>'',        // 默认需要认证操作
            'GUEST_AUTH_ON'             =>false,    // 是否开启游客授权访问
            'GUEST_AUTH_ID'             =>0,        // 游客的用户ID
            'DB_LIKE_FIELDS'            =>'title|remark',
            'RBAC_ROLE_TABLE'           =>'think_role',
            'RBAC_USER_TABLE'           =>'think_role_user',
            'RBAC_ACCESS_TABLE'         =>'think_access',
            'RBAC_NODE_TABLE'           =>'think_node',
            'SHOW_PAGE_TRACE'       =>1      //显示调试信息
        );

      注:

        Public模块是无需认证的

        默认网关地址就是认证失败,没有权限跳转到此处,重新登陆

        ADMIN_AUTH_KEY表示超级管理员权限,不用分配权限,它什么权限都有

    重要的方法:

      authenticate($map,$model=”)  传入查询用户的条件和用户表的MODEL 返回数组包含用户的信息

      saveAccessList($authId=null)  传入用户的ID,无返回值,只是设置 $_SESSION[‘_ACCESS_LIST’]的值

      checkAccess()  检测当前模块和操作是否需要验证

      checkLogin()   检测登录

      AccessDecision($appName=APP_NAME)  检测当前项目模块操作 是否在$_SESSION[‘_ACCESS_LIST’]数组中

            $_SESSION[‘_ACCESS_LIST’][‘当前操作’][‘当前模块’][‘当前操作’]是否存在,存在,表示有权限

      getAccessList($authId)  通过查询数据库 返回权限列表,$_SESSION[‘_ACCESS_LIST’]的值

  • 相关阅读:
    Mybatis源代码分析之类型转换
    eclipse中对于@override注解的函数报父类没有该方法
    Mybatis源代码分析之metadata包
    Android GC
    有道单词本导出xml转换.
    广播的接收与U盘广播
    Bitmap和Drawable相互转换方法
    如何提交程序到Android Market
    error parsing xml:unbound prefix
    android获取屏幕尺寸、密度
  • 原文地址:https://www.cnblogs.com/baby123/p/5337837.html
Copyright © 2011-2022 走看看