AdminRole.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /**
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecadmin\models;
  10. use Yii;
  11. use yii\db\ActiveRecord;
  12. use fec\helpers\CUrl;
  13. /**
  14. * @author Terry Zhao <2358269014@qq.com>
  15. * @since 1.0
  16. */
  17. class AdminRole extends ActiveRecord
  18. {
  19. private $_admin_menu;
  20. private $_admin_menu_tree_arr;
  21. public $_ajaxMenuEditUrl;
  22. public static function tableName()
  23. {
  24. return '{{%admin_role}}';
  25. }
  26. public function rules()
  27. {
  28. $current_rules = [
  29. ['role_name', 'required'],
  30. ['role_description', 'required'],
  31. ['role_name', 'validateRoleName'],
  32. ];
  33. return $current_rules;
  34. }
  35. # AdminRole::getAdminRoleArr()
  36. public static function getAdminRoleArr(){
  37. $roles_arr = [];
  38. $allRoles = self::find()->asArray()->all();
  39. if(is_array($allRoles) && !empty($allRoles)){
  40. foreach($allRoles as $role){
  41. $roles_arr[$role['role_id']] = $role['role_name'];
  42. }
  43. }
  44. return $roles_arr;
  45. }
  46. # 验证权限名字。是否存在重复
  47. public function validateRoleName($attribute,$params){
  48. if($role_name = $this->role_name){
  49. if($role_id = $this->role_id){
  50. $one = AdminRole::find()->where(" role_id != :role_id AND role_name = :role_name ",[':role_id'=>$role_id,':role_name'=>$role_name])->one();
  51. }else{
  52. $one = AdminRole::find()->where(" role_name = :role_name ",[':role_name'=>$role_name])->one();
  53. }
  54. if($one->role_name){
  55. $this->addError($attribute,"this role name is exist!");
  56. }
  57. if(!is_numeric($order)){
  58. }
  59. }
  60. }
  61. public function getAllRoleIds(){
  62. $data = AdminRole::find()->asArray()->select(['role_id'])->all();
  63. $role_ids = [];
  64. if(!empty($data)){
  65. foreach($data as $d){
  66. $role_ids[] = $d['role_id'];
  67. }
  68. }
  69. return $role_ids;
  70. }
  71. # 此处需要 redis_cache 缓存 redis cache
  72. # 得到所有的role_id 对应的允许访问的role_key(menu 中的)
  73. public function getAllRoleMenuRoleKey(){
  74. $secuityUrlKey = $this->secuityUrlKey();
  75. $role_ids = $this->getAllRoleIds();
  76. //var_dump($role_ids);
  77. $role_menu_keys = [];
  78. if(!empty($role_ids)){
  79. foreach($role_ids as $role_id){
  80. $d_menu_ids = AdminRoleMenu::find()
  81. ->asArray()
  82. ->select(['menu_id'])
  83. ->where(['role_id' => $role_id])
  84. ->all();
  85. $role_keys = [];
  86. $menu_ids = [];
  87. if(!empty($d_menu_ids)){
  88. foreach($d_menu_ids as $d){
  89. $menu_ids[] = $d['menu_id'];
  90. }
  91. }
  92. if($menu_ids){
  93. $menus = AdminMenu::find()->asArray()
  94. ->where(['in','id',$menu_ids])
  95. ->all();
  96. // var_dump(['in','id',$menu_ids]);
  97. if(!empty($menus)){
  98. foreach($menus as $menu){
  99. $role_keys[] = $menu['role_key'];
  100. }
  101. $role_menu_key[$role_id] = array_merge($role_keys,$secuityUrlKey);
  102. }
  103. }else{
  104. $role_menu_key[$role_id] = $secuityUrlKey;
  105. }
  106. }
  107. }
  108. return $role_menu_key;
  109. }
  110. # 非权限验证的url key
  111. public function secuityUrlKey(){
  112. return [
  113. //'/fecadmin/login',
  114. //'/fecadmin/logout',
  115. ];
  116. }
  117. }