118 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php namespace Gdoo\User\Services;
 | |
| 
 | |
| use Auth;
 | |
| use Request;
 | |
| 
 | |
| use Gdoo\User\Models\UserAsset;
 | |
| 
 | |
| class UserAssetService
 | |
| {
 | |
|     protected static $permissions = [];
 | |
| 
 | |
|     public static function setPermissions($permissions)
 | |
|     {
 | |
|         self::$permissions = $permissions;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * 检查权限
 | |
|      */
 | |
|     public static function check($role_id, $action, $asset)
 | |
|     {
 | |
|         static $assets = null;
 | |
| 
 | |
|         if ($assets == null) {
 | |
|             $assets = static::getRoleAssets($role_id);
 | |
|         }
 | |
| 
 | |
|         // 授权访问
 | |
|         if (isset($assets[$asset][$action])) {
 | |
|             return $assets[$asset][$action];
 | |
|         }
 | |
| 
 | |
|         // 跳过ACL检查的方法
 | |
|         if (in_array(Request::action(), static::$permissions)) {
 | |
|             return 1;
 | |
|         }
 | |
| 
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     public static function getAssets()
 | |
|     {
 | |
|         static $assets = null;
 | |
| 
 | |
|         if ($assets == null) {
 | |
|             $assets = UserAsset::get(['id', 'name', 'rules'])->toArray();
 | |
|         }
 | |
|         return $assets;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 获取角色资源
 | |
|      */
 | |
|     public static function getRoleAssets($roleId)
 | |
|     {
 | |
|         static $assets = null;
 | |
| 
 | |
|         if ($assets == null) {
 | |
|             $assets = static::getAssets();
 | |
|         }
 | |
| 
 | |
|         foreach ($assets as $key => $asset) {
 | |
|             $rules = (array)json_decode($asset['rules'], true);
 | |
| 
 | |
|             foreach ($rules as $key => $rule) {
 | |
|                 if (isset($rule[$roleId])) {
 | |
|                     $res[$asset['name']][$key] = ($rule[$roleId] > 0 ? $rule[$roleId] : 1);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return $res;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 获取角色资源
 | |
|      */
 | |
|     public static function getNowRoleAssets()
 | |
|     {
 | |
|         $res = [];
 | |
|         $assets = static::getRoleAssets(Auth::user()->role_id);
 | |
| 
 | |
|         $assets = $assets[Request::module()];
 | |
|         if ($assets) {
 | |
|             foreach ($assets as $key => $asset) {
 | |
|                 list($controller, $action) = explode('.', $key);
 | |
|                 if ($controller == Request::controller()) {
 | |
|                     $res[$action] = $asset;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return $res;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * 获取角色资源
 | |
|      */
 | |
|     public static function getRoleAuthorise($roleId)
 | |
|     {
 | |
|         static $assets = null;
 | |
| 
 | |
|         if ($assets == null) {
 | |
|             $assets = static::getAssets();
 | |
|         }
 | |
| 
 | |
|         foreach ($assets as $key => $asset) {
 | |
|             $rules = (array)json_decode($asset['rules'], true);
 | |
|             
 | |
|             foreach ($rules as $key => $rule) {
 | |
|                 if (isset($rule[$roleId])) {
 | |
|                     $key = str_replace('.', '/', $asset['name'].'/'.$key);
 | |
|                     $res[$key] = ($rule[$roleId] > 0 ? $rule[$roleId] : 1);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return $res;
 | |
|     }
 | |
| }
 |