Role.php 3.55 KB
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;

use Auth;

class Role extends Model{

	protected $table = 'roles';

	//protected $fillable = array('group','status','data');

	private $roledataArr=array();
	
	public static function userByModuleACL($module,$read,$write,$admin)
	{
		$rolematches=array();
		$roles=Role::all();
		foreach($roles as $role)
		{
			$nread=(stristr($role->modulerwa,$module)||stristr($role->modulerw,$module)||stristr($role->moduler,$module))&&$read;
			$nwrite=(stristr($role->modulerwa,$module)||stristr($role->modulerw,$module))&&$write;
			$nadmin=(stristr($role->modulerwa,$module))&&$admin;

			if($nread==$read&&$nwrite==$write&&$nadmin==$admin)$rolematches[]=$role->rolename;
		}
		if(empty($rolematches))$rolematches[]="__ERROR__";
		$users=User::whereIn("usertype",$rolematches)->get();
		
		return $users;
	}
	
	public function roleAccess($type,$str)
	{
		if(empty($this->roledataArr))
		{
			$roledataArr=array();
			$roledataArr['modulerwa']=array_filter(explode(",",strtolower($this->modulerwa)));
			
			$roledataArr['modulerw']=array_filter(explode(",",strtolower($this->modulerw)));
			$roledataArr['modulerw']=array_merge($roledataArr['modulerw'],$roledataArr['modulerwa']);
			
			$roledataArr['moduler']=array_filter(explode(",",strtolower($this->moduler)));
			$roledataArr['moduler']=array_merge($roledataArr['moduler'],$roledataArr['modulerw']);
			
			
			$roledataArr['grouprwa']=array_filter(explode(",",strtolower($this->grouprwa)));
			
			$roledataArr['grouprw']=array_filter(explode(",",strtolower($this->grouprw)));
			$roledataArr['grouprw']=array_merge($roledataArr['grouprw'],$roledataArr['grouprwa']);
			
			$roledataArr['groupr']=array_filter(explode(",",strtolower($this->groupr)));
			$roledataArr['groupr']=array_merge($roledataArr['groupr'],$roledataArr['grouprw']);
			
			$this->roledataArr=$roledataArr;
		}
		
		$str=strtolower($str);
		if(!empty($this->roledataArr[$type])&&in_array($str,$this->roledataArr[$type]))return true;
		return false;
	}
	
// 	protected static function boot()
// 	{
// 		parent::boot();
// 
// 		static::addGlobalScope('groupacl', function(\Illuminate\Database\Eloquent\Builder $builder)
// 		{
// 			if(Auth::check())
// 			{
// 				$builder->whereIn('group',Auth::user()->getAccessList("group",true,false,false));
// 			}
// 		});
// 		
// 		static::creating(function($model)
// 		{
// 			if(Auth::check())
// 			{
// 				if($model->group=='')$model->group=Auth::user()->group;
// 				if($model->group=='')$model->group="Default";
// 				
// 				$groupacl=Auth::user()->getAccessList("group",false,true,false);
// 				if(!in_array($model->group,$groupacl))
// 				{
// 					throw new \Exception("No Access to Create [".Auth::user()->id."] : (".implode(",",$groupacl).") in $model->group");
// 					return false;
// 				}
// 			}
// 			else if($model->group=='')$model->group="Default";
// 		});
// 		static::updating(function($model)
// 		{
// 			if(Auth::check())
// 			{
// 				$original = $model->getOriginal();
// 				if($original['group']=='')$original['group']='Default';
// 				
// 				if($model->group=='')$model->group=Auth::user()->group;
// 				if($model->group=='')$model->group="Default";
// 				
// 				$groupacl=Auth::user()->getAccessList("group",false,true,false);
// 				if(!in_array($original['group'],$groupacl)||!in_array($model->group,$groupacl))
// 				{
// 					throw new \Exception("No Access to Update [".Auth::user()->id."] : (".implode(",",$groupacl).") in $model->group");
// 					return false;
// 				}
// 			}
// 			else if($model->group=='')$model->group="Default";
// 		});
// 	}
}