【问题标题】:How to generate a user role grid如何生成用户角色网格
【发布时间】:2010-09-14 22:05:12
【问题描述】:

我有以下表格:

       users (id, username, ... )
       roles (id, name)
 roles_users (user_id, role_id)

我想知道如何创建一种很好的用户角色网格,管理员可以使用它来以清晰的方式管理用户角色。我想要的基本上是一个充满复选框的表格,如下所示:

        Login  Editor  Admin
Alice     ■      ■       ■
Bob       ■      □       □      
Carol     ■      ■       □

                      [Apply]

生成表并不是什么大问题,但是当涉及到如何命名所有复选框,尤其是如何以不太笨拙的方式读取和更新数据库时,我非常不确定如何处理它。有没有人对如何以最干净的方式做到这一点有任何好的建议或指示?

我正在使用 Kohana 3 框架,如果有什么可以让这更容易的话,但我当然欢迎任何答案。

【问题讨论】:

    标签: php mysql forms kohana-3


    【解决方案1】:

    我对 Kohana2 做了类似的事情。使用其用户和角色模型,为用户设置角色就像$user->roles = $rolesArray 一样简单。然后$user->save() 知道自动更新/插入。

    为复选框命名的一种方法是name="userid[]" value="roleid",所以name="1[]" value="2"。这些将在每个用户 ID 的表单提交中显示为 php 数组。然后你可以把它们做成数组并分配给每个用户对象。

    【讨论】:

    • 不错。不过,我似乎无法将数组交给 KO3 中的 x 对多关系。
    • 哦,好的。我没有玩过 Kohana3,但我认为这么好的功能会被继承下来。您总是可以快速删除该用户的所有角色,然后插入新角色,尽管这不是很有效。或者获取数组中的现有角色,与新角色进行比较(例如array_diff()),然后相应地删除或插入。
    【解决方案2】:
    1. 默认roles表包含 namedescription 字段, 用它来生成复选框。
    2. 我希望更改权限 一个用户一次。就像是 这:
              Login      Editor    Admin 
      Alice     ■       □     ■     [Apply]
    3. Ko3 中的 ORM 不支持“魔法” HABTM 并提供 add()/has()/remove() 工作方法 多对多关系。那么你 应该先调用 remove() 来删除 旧设置(这是我的 fixremove() 一次删除所有角色的方法), 然后拨打add() 对于每个新角色。另一种方法是 遍历角色和 检查每个角色 $user->has('role', $role).

      我的查询太多了 :) 你可以 存储原始用户角色和 计算差异($removed_roles$new_roles) 保存前。使用数据库 要删除的查询生成器 $removed_roles 并添加 $new_roles(最多 2 个查询)。

    PS。是的,我的英语很烂,我知道 ;)

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多