Есть ли более простой способ проверить пользовательские разрешения на вход метода? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть C # MVC Framework, передающая объекты через угловой интерфейс.На стороне C # я пытаюсь проверить, разрешено ли пользователю создавать объект, проверяя переданные свойства объекта.Есть ли более чистый способ сделать это, например, не вызывать личность каждый раз?Прямо сейчас у меня есть:

Код проверки объекта из моего контроллера C #:

[HttpGet]
public ActionResult<AppUser> UpdateUser([FromBody]AppUser au)
        var identity = (ClaimsIdentity)User.Identity;
        var auclaims = new ApplicationUser(identity);    
        if (!auclaims.CanModifyUser(au))
            return StatusCode(401, "invalid permissions");
        .....
        }

1 Ответ

0 голосов
/ 25 сентября 2019

вы можете создать новый класс:

public class CheckPermission : ActionFilterAttribute {

    public string ArgName { get; }

    public CheckPermission(string argName)
    {
        this.ArgName = argName;

    }

    public override void OnActionExecuting(ActionExecutingContext context) {

        var controller = context.Controller as Controller;

        var identity = (ClaimsIdentity)controller.User.Identity;

        var au = context.ActionArguments[ArgName] as AppUser;

        var auclaims = new ApplicationUser(identity);

        if (!auclaims.CanModifyUser(au)) 
            context.Result = controller.StatusCode(401, "You do not have permission to add a user to this company");

        base.OnActionExecuting(context);
    }
}

Затем наденьте этот атрибут на ваше действие:

 [HttpGet]
 [CheckPermission("au")]
 public ActionResult<AppUser> UpdateUser([FromBody]AppUser au)
 {
        // focus on your business logic
 }

вы можете повторно использовать этот атрибут для любого действия, чтобы проверить разрешение пользователя.

Это относится к концепции АОП.

См. https://msdn.microsoft.com/en-us/magazine/dn574804.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...