Hi,
Is it possible to get current controller id and controller action in current controller constructor. I have developed generic function in Controller class which i want to call from child controller class constructor.My objective is to check if user has permission to access controller action e.g view, update action etc.
I have tried with following code but it throws following exception:
[color="#FF0000"][font="Courier New"]PHP Fatal error: Call to a member function getId() on a non-object [/font][/color]
Department Controller
class DepartmentController extends Controller
{
/**
* @var string the default layout for the views. Defaults to '//layouts/column2', meaning
* using two-column layout. See 'protected/views/layouts/column2.php'.
*/
public $layout='//layouts/column2';
public function __construct() {
$this->actionCheckControllPermission();
}
...
Controller Class
class Controller extends CController
{
/**
* @var string the default layout for the controller view. Defaults to '//layouts/column1',
* meaning using a single column layout. See 'protected/views/layouts/column1.php'.
*/
public $layout='//layouts/column1';
/**
* @var array context menu items. This property will be assigned to {@link CMenu::items}.
*/
public $menu=array();
/**
* @var array the breadcrumbs of the current page. The value of this property will
* be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
* for more details on how to specify this property.
*/
public $breadcrumbs=array();
public function actionCheckControllPermission() {
$vUserID = 0;
$vController = "/".$this->getId();
$vControllerAction = "/".$this->getAction()->getId();
if(isset(Yii::app()->user->id)) $vUserID = Yii::app()->user->id;
$aUserDetail = Common::getUserDetail($vUserID);
// Common::PrintR($aUserDetail);
$vRoleId = $aUserDetail[0]['user_role'];
if(Common::checkUserPermission($vRoleId, $vController.$vControllerAction)) return true;
else die("you dont have permission to access this page");
}
}