PHPIN.NET

 找回密码
 立即注册
查看: 6074|回复: 0

[技巧手记] YII2 无限级递归权限验证

[复制链接]

469

主题

31

回帖

5509

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5509
发表于 2017-8-25 15:15:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
YII2 无限级递归权限验证

  1. <?php
  2. namespace backend\components;

  3. use Yii;
  4. use common\models\Department;
  5. use common\models\DepartmentUser;
  6. /**
  7. * Description of CheckPermision
  8. *
  9. * @author user
  10. */
  11. class CheckPermision {
  12.    
  13.     public static function check($addUserId,$depId=0) {
  14.         //如果有高级权限,直接授权
  15.         if(Yii::$app->user->can('SeniorManagement')) {
  16.             return true;
  17.         }
  18.         
  19.         if(!Yii::$app->user->can('checkUserQuisition')){
  20.             return false;
  21.         }
  22.         $user=Yii::$app->user;

  23.         if(!$depId) {
  24.             $dep= DepartmentUser::findOne(['user_id'=>$addUserId]);
  25.             if(!$dep) {
  26.                 return false;
  27.             }else {
  28.                $depId= $dep->department_id;
  29.             }
  30.         }
  31.         
  32.         if(DepartmentUser::findOne(['user_id'=>$user->id,'department_id'=>$depId])) {
  33.             return true;   
  34.         }else {
  35.             $deppartment=Department::findOne(['id'=>$depId]);
  36.             if($deppartment->parent_id) {
  37.                 return self::check($addUserId,$deppartment->parent_id);
  38.             }
  39.             return false;
  40.         }
  41.         
  42.     }  
  43.    
  44.     public static function whoCan($userId=0,$depId=0) {
  45.         
  46.         if(!$depId) {
  47.             $dep= DepartmentUser::findOne(['user_id'=>$userId]);
  48.             if(!$dep) {
  49.                 return false;
  50.             }else {
  51.                $depId= $dep->department_id;
  52.             }
  53.         }
  54.         
  55.         $depUsers= DepartmentUser::findAll(['department_id'=>$depId]);
  56.         
  57.         foreach($depUsers as $userInfo) {
  58.             if(Yii::$app->authManager->checkAccess($userInfo->user_id, 'checkUserQuisition')) {
  59.                 return $userInfo->user_id;
  60.             }
  61.         }
  62.         
  63.         $deppartment=Department::findOne(['id'=>$depId]);
  64.         if($deppartment) {
  65.             if($deppartment->parent_id) {
  66.                 return self::whoCan($userId,$deppartment->parent_id);
  67.             }
  68.         }
  69.         return false;        
  70.     }
  71. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHPIN.NET ( 冀ICP备12000898号-14 )|网站地图

GMT+8, 2024-4-25 13:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表