2016-12-07 9 views
0

4つの役割を持つ管理パネルを作成しています。管理者はすべてのデータに対するアクセス許可を持っています。オーガナイザーの役割は自分のデータにアクセスできます。第3の役割は主催者が許可するデータにアクセスできます。第4の役割は、第3の役割が許すアクセス権を有する。 CRUD動作においてロールとクエリを管理する方法は?

私はこのコードを使用して、現在のユーザIDを取得:

var currentUser = Guid.Parse(Thread.CurrentPrincipal.Identity.GetUserId()); 

およびデータアクセスレイヤにこのIDを渡します。現在のユーザが所望のエンティティの所有者である場合、CRUDオペレーションが動作する。私は、現在のユーザーIdは、エンティティのユーザーIDと一致した場合、それが操作を行うことができますcheckesデータアクセスleyerで :

var product=_dbContext.Products.Where(x=>x.UserId==currentUser && x.ProductId== productId); 

しかし、私は管理者があまりにもこれらの操作を行うことができるしたいです。私は、現在のユーザーの役割に基づいて同じ操作を行うための複数のメソッドを記述できることを知っています。しかし、よりクリーンなソリューションがありますか?

たとえば、主催者はid = 1の商品のオーナーであるため、id = 1の商品を編集できます。しかし、私は、管理者もid = 1の製品を編集できるようにしたい。私はあなたがこのような何かを探しているのだと思い

答えて

0

...

var rolesForUser = await userManager.GetRolesAsync(currentUser); 
Product product; 

if (rolesForUser.Contains("Admin")) 
{ 
    product = _dbContext.Products.Where(x.ProductId == productId); 
} 
else 
{ 
    product = _dbContext.Products.Where(x => x.UserId == currentUser && x.ProductId == productId); 
} 
関連する問題