目前,我正在使用 Codeigniter 开展项目,面临一个我无法解决的挑战。
View 如下:
如上图所示,有多个 Angular 色和权限可用。每个 Angular 色都有不同的权限存储在数据库中。此外,用户一次可以拥有多个 Angular 色。
目前,我可以选择用户的多个 Angular 色和权限,并且可以成功添加到数据库中。但问题是每个 Angular 色都已经将其权限存储在数据库中。所以,我想让它更加用户友好和明智,当我检查任何 User Role
复选框然后使用 Jquery/Javascript 它应该自动检查所有相关的 permissions
复选框为了弄清楚哪个 Angular 色有什么权限。
有什么帮助吗?
最佳答案
我会通过以下方式为每个前提赋予一个值
- 前提 1 = 1
- 前提 2 = 2
- 前提 3 = 4
- 前提 4 = 8
Angular 色的值是他们拥有的前提的总和
所以
- Angular 色 1(前提 1、2、4)= 11
- Angular 色 2(前提 2,3)6
然后取最高的权限值(在本例中为 8)并检查已检查的 Angular 色。
- 所以 11-8 = 3 不小于 0,所以前提 4。
- 用上次检查的结果(11-8)取当前准入值(4)的一半
- 3 - 4 = -1 小于 0。不是前提 3。
- 取当前premission值(2)的一半,但保留3的结果
- 3 - 2 = 1 不小于 0,所以前提 2。
- 还是一样
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); } }); });
您可以查看此 fiddle 的 html(我使用数据属性)实现 http://jsfiddle.net/8dcp4Lvk/3/
我将值放在 html 的数据属性中。我喜欢这个系统,因为它易于维护。您不需要在 Angular 色和权限之间的数据库中添加一个额外的表,添加或删除一个权限就像从 Angular 色值中添加或删除它的值一样简单。
在 fiddle 中,您所要做的就是添加一个新的前提条件,值为 64,作为第一个 Angular 色 (71) 的 64 和 maxFromDatabase 的 64(您通常会通过查询获得该值,同样与所有数据值)。额外的好处是您还可以以相同的方式在 PHP 代码中使用这些值。
你可以扩展它。为 Angular 色赋予一个值,例如 premission(1、2、4 等),您可以将这些值用于用户。给他两列( Angular 色和前提),在 Angular 色中你给他他所拥有的 Angular 色,在前提中你分配了前提的总数。这样你所需要的只是一些额外的列,而不是额外的表。
关于javascript - 自动选中与数据库中该 ID 相关的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25468904/