Acl.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. $objModel = new AdminAccessModel();
  31. $data =$objModel->getRoleAccessMenu($roleIds)->toArray();
  32. if(!$data) {
  33. return array('menus'=>array(),'func'=>array());
  34. }
  35. $arr = array('/'=>'0','Foundation/Index/index'=>501,'Foundation/Index/welcome'=>502,'Foundation/Login/logout'=>503);
  36. foreach ($data as $val) {
  37. $arr[$val['path']] = $val['id'];
  38. }
  39. return array('menus'=>$data,'func'=>$arr);
  40. ;
  41. }
  42. public function getRoleMenu($roleIds) {
  43. $data =$this->objModel->getRoleAccessMenu($roleIds,true);
  44. if(!$data) {
  45. return array();
  46. }
  47. return $data;
  48. }
  49. public function getRootFunc() {
  50. $data =$this->menusModel->select('id','pid','path','name','display','level','ico')->orderBy('sort','desc')->get()->toArray();
  51. if(!$data) {
  52. return array('menus'=>array(),'func'=>array());
  53. }
  54. $arr = array('/'=>'0','Foundation/Index/index'=>501,'Foundation/Index/welcome'=>502,'Foundation/Login/logout'=>503);
  55. foreach ($data as $val) {
  56. $arr[$val['path']] = $val['id'];
  57. }
  58. return array('menus'=>$data,'func'=>$arr);
  59. }
  60. /**
  61. * 获取角色权限ID
  62. * @param unknown $roleId
  63. */
  64. public function getAccessIDs($roleId) {
  65. $data = $this->objModel->select("menu_id")->where("role_id",$roleId)->get();
  66. $arr = array();
  67. if($data) {
  68. foreach ($data as $val) {
  69. $arr[] = $val['menu_id'];
  70. }
  71. }
  72. return $arr;
  73. }
  74. /**
  75. *
  76. * @param unknown $roleId
  77. * @param unknown $menuIds
  78. * @param string $allMenus 权限范围,如果为false不验证
  79. */
  80. public function setRole($roleId,$menuIds,$allMenus=false) {
  81. try
  82. {
  83. $result = \DB::transaction(function() use ($roleId, $menuIds,$allMenus)
  84. {
  85. $ok = $this->objModel->where("role_id",$roleId)->delete();
  86. if($ok===false) {
  87. throwException("删除出错");
  88. }
  89. foreach ($menuIds as $menu_id) {
  90. if($allMenus !== false) {
  91. if(!in_array($menu_id, $allMenus)) {
  92. throwException("涉及到越权操作");
  93. }
  94. }
  95. $add['role_id'] = $roleId;
  96. $add['menu_id'] = $menu_id;
  97. $ok = $this->objModel->create($add);
  98. if(!$ok) {
  99. throwException("添加出错");
  100. }
  101. }
  102. return true;
  103. });
  104. }
  105. catch (\Exception $e)
  106. {
  107. $result = false;
  108. }
  109. if( ! $result) return $this->setMsg('操作失败');
  110. return true;
  111. }
  112. }