예제 #1
0
        public virtual IActionResult GetPermissionsForType([FromServices] IPermissionsDAL permDAL, [FromQuery] string objectType)
        {
            _logger.LogInformation(nameof(GetPermissionsForType));
            var roles = HttpContext.User.Claims.Where(claim => claim.Type == ClaimTypes.Role)
                        .Select(claim => claim.Value)
                        .ToList();

            Type typeEntity;

            try
            {
                var dalAssembly = Assembly.Load(Assembly.GetExecutingAssembly().GetReferencedAssemblies()
                                                .FirstOrDefault(a => a.Name == "WBS.DAL"));
                var modelsTypes = dalAssembly.GetTypes().Where(type => type.Namespace == "WBS.DAL.Data.Models" ||
                                                               type.Namespace == "WBS.DAL.Authorization.Models");
                typeEntity = modelsTypes.FirstOrDefault(type => type.Name == objectType);
            }
            catch (ArgumentNullException)
            {
                return(BadRequest(new ResponseError("Данный тип не является частью системы.")));
            }

            var perms = permDAL.GetPermissionsForType(typeEntity.FullName, typeEntity.Assembly.GetName().Name, roles);

            bool accessToCreate, accessToRead, accessToUpdate, accessToDelete;

            accessToCreate = perms.Where(p => p.AllowCreate).Any();
            accessToRead   = perms.Where(p => p.AllowRead).Any();
            accessToUpdate = perms.Where(p => p.AllowWrite).Any();
            accessToDelete = perms.Where(p => p.AllowDelete).Any();

            return(Ok(new { accessToCreate, accessToRead, accessToUpdate, accessToDelete }));
        }
예제 #2
0
        public Permissions(GetCRUD getcrud, IHttpContextAccessor context, IPermissionsDAL _permissionsDal, ILogger <Permissions <T> > logger)
        {
            _crud          = getcrud(typeof(IPermissions <>), typeof(T)) as ICRUD <T>;
            _logger        = logger;
            permissionsDal = _permissionsDal;

            try
            {
                var roles       = context.HttpContext.User.Claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).ToList();
                var permissions = permissionsDal.GetPermissionsForType(
                    typeof(T).FullName,
                    typeof(T).Assembly.GetName().Name,
                    roles);
                _allowCreate = permissions.Any(p => p.AllowCreate);
                _allowDelete = permissions.Any(p => p.AllowDelete);
                _allowGet    = permissions.Any(p => p.AllowRead);
                _allowUpdate = permissions.Any(p => p.AllowWrite);

                //все критерии для переданного типа
                var typeCriterions = permissionsDal.GetTypeCriterions(typeof(T).FullName, typeof(T).Assembly.GetName().Name);
                foreach (var crit in typeCriterions)
                {
                    var exp  = DynamicExpressionParser.ParseLambda(typeof(T), typeof(bool), crit.Criteria, null);
                    var _del = exp.Compile();
                    _typeExpressions.Add(new ExpressionCheck {
                        ExpressionDel = _del, AllowCreate = crit.AllowCreate, AllowDelete = crit.AllowDelete, AllowRead = crit.AllowRead, AllowWrite = crit.AllowWrite
                    });
                }
            }
            catch
            {
                _logger.LogInformation("Ошибка получения ролей текущего пользователя");
            }
        }
예제 #3
0
 public AuthController(IServiceProvider provider, ProfilesDAL profileDAL, IPermissionsDAL permissionsDAL, RefreshTokenDAL refreshTokenDAL, ILogger <AuthController> logger)
 {
     _provider        = provider;
     _profileDAL      = profileDAL;
     _permissionsDAL  = permissionsDAL;
     _refreshTokenDAL = refreshTokenDAL;
     _logger          = logger;
 }
예제 #4
0
 public AuthUtils(ProfilesDAL profilesDal, RefreshTokenDAL refreshTokenDal, IPermissionsDAL permissionsDAL, IServiceProvider provider)
 {
     _profilesDal     = profilesDal;
     _refreshTokenDal = refreshTokenDal;
     _permissionsDAL  = permissionsDAL;
     _options         = provider.GetService(typeof(AuthOptions)) as AuthOptions;
     _provider        = provider;
 }
예제 #5
0
 public DescriptorOfFormGenerator(IPermissionsDAL permissionsDAL)
 {
     _permissionsDAL = permissionsDAL;
 }