自动检查与数据库中该ID相关的复选框

RK.*_*RK. 1 javascript php ajax jquery codeigniter

目前,我正在使用Codeigniter处理该项目,并面临我无法解决的挑战.

以下是观点:

在此输入图像描述

如上图所示,有多个角色和权限可用.每个角色都有不同的权限存储在数据库中.此外,用户一次可以拥有多个角色.

目前,我可以选择用户的多个角色和权限,并且可以成功添加到数据库中.但问题是每个角色已经将其权限存储在数据库中.所以,我想让它更加用户友好和明智,当我检查任何User Role复选框然后使用Jquery/Javascript时,它应该自动检查所有相关的permissions复选框,以便了解哪个角色具有哪些权限.

有帮助吗?

Jer*_*oen 7

我会按照以下方式给每个预先设定一个值

  • 预先1 = 1
  • 预先2 = 2
  • 预先3 = 4
  • 预先4 = 8

角色的值将是他们拥有的预设的总和

所以

  • 角色1(提前1,2,4)= 11
  • 角色2(提交2,3)6

然后取最高的预分配值(在这种情况下为8)并检查已检查的角色.

  1. 所以11-8 = 3不小于0,所以预设4.
  2. 用最后一次检查的结果(11-8)取当前预留值(4)的一半
  3. 3 - 4 = -1小于0. NOT premission 3.
  4. 取当前预设值的一半(2),但保持3的结果
  5. 3 - 2 = 1不小于0,所以预设2.
  6. 再次相同
  7. 1 - 1 = 0不小于0,所以预先1.

    $(".role").on("click", function(){
        $(".perm").prop("checked", false);
        $(".role:checked").each(function() {
            var reduceBy = maxFromDatabase;
            var roleRight = $(this).data("rights");
            while(reduceBy != 0) {
                if(!(roleRight - reduceBy < 0)) {
                    $("input[data-right-val='"+reduceBy+"']").prop("checked", true);
                    roleRight = roleRight-reduceBy;
                } 
                reduceBy = Math.floor(reduceBy/2);
            }
        });           
    });
    
    Run Code Online (Sandbox Code Playgroud)

您可以检查这个小提琴的html(我使用数据属性)实现http://jsfiddle.net/8dcp4Lvk/3/

我将值放在html的数据属性中.我喜欢这个系统,因为它易于维护.您不需要在角色和提交之间的数据库中添加额外的表,添加预设或删除一个表就像从角色值中添加或删除它的值一样简单.

在小提琴中,您需要做的就是添加一个值为64的新预设,第一个角色为64(71),maxFromDatabase为64(通常在查询时使用此值,与所有数据值).添加的好处是您也可以以相同的方式在PHP代码中使用这些值.

你可以扩展它.为角色赋予类似premission(1,2,4等)的值,您可以将其用于用户.给他两个专栏(角色和预备),你给他的角色,他给你的角色,并在预先分配你分配的总数.这样你只需要一些额外的colums,而不是额外的表.