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’]的值

  • 相关阅读:
    macbook 无声音解决方案
    webapck dev server代理请求 json截断问题
    百度卫星地图开启
    服务器 nginx配置 防止其他域名绑定自己的服务器
    记一次nginx php配置的心路历程
    遇到npm报错read ECONNRESET怎么办
    运行svn tortoiseSvn cleanup 命令失败的解决办法
    svn add 命令 递归目录下所有文件
    m4出现Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
    Ubuntu下安装GCC,mpc、mpfr、gmp
  • 原文地址:https://www.cnblogs.com/baby123/p/5337837.html
Copyright © 2011-2022 走看看