Acl.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. /**
  3. *
  4. * @author Mike <m@9026.com>
  5. * @version 1.0
  6. * @date 2015年11月13日
  7. *
  8. */
  9. namespace App\Services\Admin;
  10. use App\Services\Base\BaseProcess;
  11. use App\Models\AdminAccessModel;
  12. use App\Models\AdminMenusModel;
  13. class Acl extends BaseProcess {
  14. private $objModel;
  15. private $menusModel;
  16. /**
  17. * 初始化
  18. *
  19. * @access public
  20. *
  21. */
  22. public function __construct()
  23. {
  24. if( ! $this->objModel) $this->objModel = new AdminAccessModel();
  25. if( ! $this->menusModel) $this->menusModel = new AdminMenusModel();
  26. }
  27. public function checkFunc($module,$contrl,$action) {
  28. }
  29. public function getRoleFunc($roleIds) {
  30. $data =$this->objModel->getRoleAccessMenu($roleIds);
  31. if(!$data) {
  32. return array('menus'=>array(),'func'=>array());
  33. }
  34. $arr = array('/'=>'0','Foundation/Index/index'=>501,'Foundation/Index/welcome'=>502,'Foundation/Login/logout'=>503);
  35. foreach ($data as $val) {
  36. $arr[$val['path']] = $val['id'];
  37. }
  38. return array('menus'=>$data,'func'=>$arr);
  39. ;
  40. }
  41. public function getRoleMenu($roleIds) {
  42. $data =$this->objModel->getRoleAccessMenu($roleIds,true);
  43. if(!$data) {
  44. return array();
  45. }
  46. return $data;
  47. }
  48. public function getRootFunc() {
  49. $data =$this->menusModel->select('id','pid','path','name','display','level','ico')->orderBy('sort','desc')->get()->toArray();
  50. if(!$data) {
  51. return array('menus'=>array(),'func'=>array());
  52. }
  53. $arr = array('/'=>'0','Foundation/Index/index'=>501,'Foundation/Index/welcome'=>502,'Foundation/Login/logout'=>503);
  54. foreach ($data as $val) {
  55. $arr[$val['path']] = $val['id'];
  56. }
  57. return array('menus'=>$data,'func'=>$arr);
  58. }
  59. /**
  60. * 获取角色权限ID
  61. * @param unknown $roleId
  62. */
  63. public function getAccessIDs($roleId) {
  64. $data = $this->objModel->select("menu_id")->where("role_id",$roleId)->get();
  65. $arr = array();
  66. if($data) {
  67. foreach ($data as $val) {
  68. $arr[] = $val['menu_id'];
  69. }
  70. }
  71. return $arr;
  72. }
  73. /**
  74. *
  75. * @param unknown $roleId
  76. * @param unknown $menuIds
  77. * @param string $allMenus 权限范围,如果为false不验证
  78. */
  79. public function setRole($roleId,$menuIds,$allMenus=false) {
  80. try
  81. {
  82. $result = \DB::transaction(function() use ($roleId, $menuIds,$allMenus)
  83. {
  84. $ok = $this->objModel->where("role_id",$roleId)->delete();
  85. if($ok===false) {
  86. throwException("删除出错");
  87. }
  88. foreach ($menuIds as $menu_id) {
  89. if($allMenus !== false) {
  90. if(!in_array($menu_id, $allMenus)) {
  91. throwException("涉及到越权操作");
  92. }
  93. }
  94. $add['role_id'] = $roleId;
  95. $add['menu_id'] = $menu_id;
  96. $ok = $this->objModel->create($add);
  97. if(!$ok) {
  98. throwException("添加出错");
  99. }
  100. }
  101. return true;
  102. });
  103. }
  104. catch (\Exception $e)
  105. {
  106. $result = false;
  107. }
  108. if( ! $result) return $this->setMsg('操作失败');
  109. return true;
  110. }
  111. }