QeePHP的ACL设置

又开始用qeephp开发了,个人感觉这个框架越用越觉得强大,完全不亚于python的django框架。唯一的遗憾是qeephp文档的完整性是如此之差……没办法,国内的。。

  不扯没用的,进入正题,今天用了ACL访问控制。就一个字,方便。

  默认情况下,所有的访问控制规则都写在acl.yaml.php中,该文件的结构也很简单:

    控制器名称:  #这里一定要顶格

      allow: 允许使用的角色    #缩进一定要使用两个空格,一个朋友的工程里面使用了四个空格,好像也可以的样子。不要使用Tab键。角色名前要使用一个空格分隔,多个角色使用“,”分隔

  还可以使用actions语法分别指定各个方法。具体写法见例子。

  举个例子:

#起始页面,进入这个页面会被重定向到登陆页面,允许未登录用户和member访问
default:
  allow: ACL_NO_ROLE
#用户相关
user:
  allow: ACL_HAS_ROLE
  actions:
    register:
      allow: ACL_NO_ROLE
    login:
      allow: ACL_NO_ROLE
    index:
      allow: ACL_NO_ROLE 

值得一提的是还可以使用deny来只禁止特定用户。

在设置的时候一直遇到一个问题,解决了好久好久,原来这个文件不支持两个allow,必须使用逗号分隔多个用户,写到一条规则里。如:allow: 'MEMBER, ADMIN'

关于角色:

ACL_NO_ROLE 是一个 QeePHP 预定义的值,表示不具备任何角色的用户。

ACL_HAS_ROLE,用来表示任何角色。

还可以使用

ALL_CONTROLLERS:

  deny: ACL_EVERYONE

指定一个全局的规则

下面引用下qeephp-quick-start中的配置,因为今天写的配置没有那个例子全。

users:

  allow: ACL_HAS_ROLE

  actions:

    register:

      allow: ACL_NO_ROLE

    login:

      allow: ACL_NO_ROLE 

tasks:

  allow: ACL_HAS_ROLE 

default:

  allow: ACL_EVERYONE 

ALL_CONTROLLERS:

  deny: ACL_EVERYONE

#注:不要复制上面的代码,以免缩进错误。

配置完了千万不要忘记只有启用acluser插件才能够使用acl控制。

下面对acl插件的配置进行简介,在适当地方引用qeephp的API。

启用acluser插件其实很简单,只要稍微修改下自动生成的model文件夹中的类就可以了。需要更改的类就是你的用户类(即:含有用户名和密码的类)

大概在22行附近就可以找到配置代码,做如下就该就可以了(下面的代码是笔者项目里的配置,22-33行):

            'behaviors' => 'acluser',

            // 指定行为插件的配置
            'behaviors_settings' => array
            (
                # '插件名' => array('选项' => 设置),
                'acluser' => array(
                    'password_prop' => 'password',
                    'acl_data_props' => 'username, id, level'
                ),
            ),

对配置做少许解释:'behaviors' => 'acluser',       指定了使用acluser插件

下面几行就是对插件的设置:

      'acluser' => array(
                    'password_prop' => 'password',
                    'acl_data_props' => 'userName, id, level'
                ),

下面引用qeephp的API就可以说明这些设置了,希望对读者有所启发。

acluser 行为插件支持下列设置选项:

  • encode_type: 密码的加密方式,默认值为 crypt。

    该选项可以设置为 cleartext, md5、crypt、sha1、sha2,­或任何有效的 PHP 全局函数名。其中,cleartext 表示不加密密码。

    如果要使用自定义的加密方法,可以指定 encode_type 设置为一个回调函数,例如:

    'encode_type' => array('MyClass', 'encryptString');
  • username_prop: 指示在模型中使用哪一个属性­来保存的用户名,默认值为 username。

    由于 acluser 插件需要通过用户名来查询对­象,因此需要指定正确的属性名称。

  • password_prop: 指示在模型中使用哪一个属性­来保存用户密码,默认值为 password。

    acluser 插件在验证用户登录、更新密­码时需要用到该设置指定的属性。

  • roles_enabled: 是否启用对关联角色的支持,默认值为 false。

    当启用关联角色支持后,可以通过 aclRoles() 方法来获得用户对象关联的角色信息。

    关联角色支持需要设置下列选项:

    • roles_prop: 角色信息映射到用户模型的哪­一个属性之上。默认值为 roles。
    • roles_name_prop: 指示角色模型使用哪一个属性­保存角色名称,默认值为 name。
  • acl_data_props: 指示在使用 aclData() 方法时,返回的数组中要包含哪些属性。

    默认值为 uesrname。

    要指定多个属性,用“,”分­割,例如“username, email”。不过不管指定什么属性,

    aclData() 方法返回的数组中总是包含一个名为 id 的键,其键值是用户的 ID。

  • update_login_auto: 是否在成功调用 validateLogin() 后自动更新用户信息,默认值­为 false。

    当 update_login_auto 为 true 时,可以指定下列选项:

    • update_login_cou­nt_prop: 记录登录次数的属性,不指定则不更新;
    • update_login_at_prop: 记录登录时间的属性,不指定则不更新
    • update_login_ip_prop: 记录登录 IP 的属性,不指定则不更新
  • register_save_auto: 是否在新建用户对象时,自动­保存下列信息,默认值为 false。
    • register_ip_prop: 记录用户的 IP 地址)
    • register_at_prop: 记录创建时间
  • unique_username: 指示是否检查用户名的唯一性,默认值为 true。

    当该设置为 true 时,将不允许创建同名用户。

    并在尝试创建同名用户时抛出 AclUser_Dupli­cateUsernameEx­ception 异常。

默认情况下,所有的访问控制规则都书写在 acl.yaml 中,该文件的结构如下:

控制器名称:
  allow: 允许使用该控制器的角色
LookingFor::find('year>=1991 and year<=1995 and sex='女' and money>4000')->get(1);"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值