Don’t create a new model, just use different scenarios.
I tend to have the default scenario be the most restrictive, so you don’t accidentally give a user too many privileges by forgetting to specify the scenario. Then create a separate scenario called, say, ‘admin’, and include the rules for the fields that only they can edit.
Here’s an example from one of my own projects:
return array(
array('Name, Description, Value', 'filter', 'filter'=>'trim'),
array('Name, Description, Value, Status', 'required'),
array('SiteId', 'required', 'except'=>'admin'),
array('Value', 'length', 'max'=>9),
array('ItemGroupId, SiteId, Value', 'numerical', 'integerOnly'=>true),
array('Name', 'length', 'max'=>100),
array('Status', 'in', 'range'=>array_keys(self::$safeStatuses), 'except'=>'admin'),
array('Status', 'in', 'range'=>array_keys(self::$validStatuses), 'on'=>'admin'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('Id, ItemGroupId, SiteId, Name, Description, Value, Created, CreatedBy, Status, searchNameDescription, searchTags, searchItemGroupTags, searchTerm', 'safe', 'on'=>'search'),
You’ll probably want to create a different view for each scenario.
If you define a rule as ‘on’=>‘admin’, the standard user will be unable to bulk assign to those fields.