コード例 #1
0
        public ActionResult DetailsUser(string id)
        {
            var context           = new AppSecurityContext();
            var userRepository    = new UserRepository(context);
            var roleRepository    = new RoleRepository(context);
            var userPermissionRep = new UserPermissionRepository(context);

            var user  = userRepository.Find(id);
            var roles = roleRepository.GetRolesByUserId(user.Id);
            var model = new DetailsAppUserViewModel();

            model.Email         = user.Email;
            model.Id            = user.Id;
            model.AssignedRoles = new List <AppRoleViewModel>();
            foreach (var item in roles)
            {
                model.AssignedRoles.Add(new AppRoleViewModel {
                    Id = item.Id, Name = item.Name
                });
            }
            var permissions = userPermissionRep.GetAll()
                              .Where(x => x.UserId == id);

            model.UserPermissions = mapper.Map <IEnumerable <AppUserPermissionViewModel> >(permissions);
            return(View(model));
        }
コード例 #2
0
        public virtual EntityPermission Validate(Type entityType, int userId)
        {
            UserBase user;

            using (var uow = UnitOfWorkFactory.CreateWithoutRoot()) {
                user = UserRepository.GetUserById(uow, userId);

                //Разрешено изменять документ если пользователь администратор и отключена проверка прав администратора
                if (user != null && user.IsAdmin && NoRestrictPermissionsForAdmin)
                {
                    return(EntityPermission.AllAllowed);
                }

                var permissionAttr = entityType.GetCustomAttribute <EntityPermissionAttribute>();
                if (permissionAttr == null)
                {
                    return(EntityPermission.AllDenied);
                }

                var userPermission = UserPermissionRepository.GetUserEntityPermission(uow, entityType.Name, userId);
                if (userPermission == null)
                {
                    return(EntityPermission.Empty);
                }
                else
                {
                    return(new EntityPermission(
                               userPermission.CanCreate,
                               userPermission.CanRead,
                               userPermission.CanUpdate,
                               userPermission.CanDelete
                               ));
                }
            }
        }
コード例 #3
0
        public ActionResult CreateUserPermission(string id)
        {
            var model = new NewAppUserPermissionViewModel();

            using (var context = new AppSecurityContext())
            {
                var resourcesRepository    = new ResourceRepository(context);
                var userPermissionRository = new UserPermissionRepository(context);
                var userRepository         = new UserRepository(context);
                var actionRepository       = new ActionRepository(context);

                var user = userRepository.Find(id);
                if (user == null)
                {
                    RedirectToAction("Users");
                }

                var actions = actionRepository.GetAll().OrderBy(x => x.Name);
                model.AvailableActions = mapper.Map <ICollection <AppActionViewModel> >(actions);
                model.User             = mapper.Map <AppUserViewModel>(user);
                model.ResourcesList    = PopulateResourceFromNewUserPermission(id);

                return(View(model));
            }
        }
コード例 #4
0
        public ActionResult CreateUserPermission(NewAppUserPermissionViewModel model)
        {
            using (var context = new AppSecurityContext())
            {
                var actionRepository         = new ActionRepository(context);
                var permissionRepository     = new PermissionRepository(context);
                var userPermissionRepository = new UserPermissionRepository(context);
                var userRepository           = new UserRepository(context);

                try
                {
                    var actions    = actionRepository.Query(x => model.SelectedActions.Contains(x.Key)).Select(x => x.Key);
                    var permission = permissionRepository
                                     .GetAll()
                                     .Where(x => x.ResourceKey == model.SelectedResource)
                                     .Where(x => actions.Contains(x.ActionKey));

                    userPermissionRepository.AddPermissionsByUserId(model.User.Id, permission.Select(x => x.Id).ToArray());
                    context.SaveChanges();
                    return(RedirectToAction("UserPermission", new { id = model.User.Id }));
                }
                catch (Exception ex)
                {
                    ViewBag.Error = ex.Message;
                    var actions = actionRepository.GetAll().OrderBy(x => x.Name);
                    var user    = userRepository.Find(model.User.Id);
                    model.User             = mapper.Map <AppUserViewModel>(user);
                    model.AvailableActions = mapper.Map <ICollection <AppActionViewModel> >(actions);
                    model.ResourcesList    = PopulateResourceFromNewUserPermission(model.SelectedResource);
                    return(View(model));
                }
            }
        }
コード例 #5
0
        private Dictionary <string, bool> GetUserPermissions(int userId)
        {
            var fld = UserPermissionRow.Fields;

            return(Cache.GetLocalStoreOnly("UserPermissions:" + userId, TimeSpan.Zero, fld.GenerationKey, () =>
            {
                using (var connection = SqlConnections.NewByKey("Default"))
                {
                    var result = new Dictionary <string, bool>(StringComparer.OrdinalIgnoreCase);

                    connection.List <UserPermissionRow>(q => q
                                                        .Select(fld.PermissionKey)
                                                        .Select(fld.Granted)
                                                        .Where(new Criteria(fld.UserId) == userId))
                    .ForEach(x => result[x.PermissionKey] = x.Granted ?? true);

                    var implicitPermissions = UserPermissionRepository.GetImplicitPermissions(Cache.Memory, TypeSource);
                    foreach (var pair in result.ToArray())
                    {
                        HashSet <string> list;
                        if (pair.Value && implicitPermissions.TryGetValue(pair.Key, out list))
                        {
                            foreach (var x in list)
                            {
                                result[x] = true;
                            }
                        }
                    }

                    return result;
                }
            }));
        }
コード例 #6
0
        public ActionResult UserPermission(string id)
        {
            try
            {
                using (var context = new AppSecurityContext())
                {
                    var userPermissionRep = new UserPermissionRepository(context);
                    var permissionRep     = new PermissionRepository(context);
                    var userRep           = new UserRepository(context);

                    var permissions = userPermissionRep.GetAll()
                                      .Where(x => x.UserId == id);

                    var user = userRep.Find(id);

                    var model = new ListAppUserPermissionViewModel();
                    model.UserId          = user.Id;
                    model.UserName        = user.UserName;
                    model.UserPermissions = mapper.Map <IEnumerable <AppUserPermissionViewModel> >(permissions);
                    return(View(model));
                }
            }
            catch
            {
                return(View("Users"));
            }
        }
コード例 #7
0
        private HashSet <string> GetRolePermissions(int roleId)
        {
            var fld = RolePermissionRow.Fields;

            return(Cache.GetLocalStoreOnly("RolePermissions:" + roleId, TimeSpan.Zero, fld.GenerationKey, () =>
            {
                using (var connection = SqlConnections.NewByKey("Default"))
                {
                    var result = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

                    connection.List <RolePermissionRow>(q => q
                                                        .Select(fld.PermissionKey)
                                                        .Where(new Criteria(fld.RoleId) == roleId))
                    .ForEach(x => result.Add(x.PermissionKey));

                    var implicitPermissions = UserPermissionRepository.GetImplicitPermissions(Cache.Memory, TypeSource);
                    foreach (var key in result.ToArray())
                    {
                        HashSet <string> list;
                        if (implicitPermissions.TryGetValue(key, out list))
                        {
                            foreach (var x in list)
                            {
                                result.Add(x);
                            }
                        }
                    }

                    return result;
                }
            }));
        }
コード例 #8
0
        public static IUserPermissionManagement GetInstance()
        {
            IDbFactory dbFactory = new DbFactory();
            IUserPermissionRepository permRepor = new UserPermissionRepository(dbFactory);
            IUnitOfWork uow = new UnitOfWork(dbFactory);

            return(new UserPermissionManagement(permRepor, uow));
        }
コード例 #9
0
        public SaveResponse Update(IUnitOfWork uow, RolePermissionUpdateRequest request)
        {
            Check.NotNull(request, "request");
            Check.NotNull(request.RoleID, "roleID");
            Check.NotNull(request.Permissions, "permissions");

            var roleID = request.RoleID.Value;
            var oldList = new HashSet<string>(
                GetExisting(uow.Connection, roleID, request.Module, request.Submodule)
                .Select(x => x.PermissionKey), StringComparer.OrdinalIgnoreCase);

            var newList = new HashSet<string>(request.Permissions.ToList(),
                StringComparer.OrdinalIgnoreCase);

            var allowedKeys = new UserPermissionRepository().ListPermissionKeys()
                .Entities.ToDictionary(x => x);
            if (newList.Any(x => !allowedKeys.ContainsKey(x)))
                throw new AccessViolationException();

            if (oldList.SetEquals(newList))
                return new SaveResponse();

            foreach (var k in oldList)
            {
                if (newList.Contains(k))
                    continue;

                new SqlDelete(fld.TableName)
                    .Where(
                        new Criteria(fld.RoleId) == roleID &
                        new Criteria(fld.PermissionKey) == k)
                    .Execute(uow.Connection);
            }

            foreach (var k in newList)
            {
                if (oldList.Contains(k))
                    continue;

                uow.Connection.Insert(new MyRow
                {
                    RoleId = roleID,
                    PermissionKey = k
                });
            }

            BatchGenerationUpdater.OnCommit(uow, fld.GenerationKey);
            BatchGenerationUpdater.OnCommit(uow, Entities.UserPermissionRow.Fields.GenerationKey);

            return new SaveResponse();
        }
コード例 #10
0
        public SelectList PopulateResourceFromNewUserPermission(string userId, object selectedItem = null)
        {
            using (var context = new AppSecurityContext())
            {
                var resourcesRepository    = new ResourceRepository(context);
                var userPermissionRository = new UserPermissionRepository(context);

                var permissionSelect = userPermissionRository.GetPermissionByUserId(userId).Select(p => p.ResourceKey).Distinct();
                var resourcesQuery   = resourcesRepository.GetAll();
                var resources        = resourcesQuery.Where(x => !permissionSelect.Contains(x.Key)).ToList();
                resources.Insert(0, new AppResource {
                    Key = null, Name = "Seleccione"
                });
                return(new SelectList(resources, "Key", "Name", selectedItem));
            }
        }
コード例 #11
0
ファイル: AisFilePage.cs プロジェクト: tqvtqv/AccController
        public ActionResult MyAction()
        {
            var fileRowResponse = this.InTransaction("Default", (uow) =>
            {
                //var saveFileResponse = new AisFileResultsRepository().Create(uow, new SaveRequest<AisFileResultsRow>
                //{
                //    Entity = new AisFileResultsRow
                //    {
                //        FileId = 1,
                //        ReqId = 1,
                //        ReqType = 0
                //    }
                //});
                //var res1 = new GroupRepository().Create(uow, new SaveRequest<GroupRow>
                //{
                //    Entity = new GroupRow
                //    {

                //        Name = "tanhn",
                //        Parent = "tanhn",
                //        Shortname = "tanhn",
                //        Priority = 1,
                //        Status = (statusvalue?)1

                //    }
                //});

                UserPermissionListRequest request = new UserPermissionListRequest();
                request.UserID       = 1;
                var test             = new UserPermissionRepository().List(uow.Connection, request);
                var saveFileResponse = new TesttRepository().Create(uow, new SaveRequest <TesttRow>
                {
                    Entity = new TesttRow
                    {
                        Name = "tanhn"
                    }
                });

                return(saveFileResponse);
            });

            Result <ActionResult> res;

            res = new Result <ActionResult>(fileRowResponse);
            return(res);
        }
コード例 #12
0
        protected override ScriptUserDefinition GetData()
        {
            var result = new ScriptUserDefinition();

            if (!(UserAccessor.User?.GetUserDefinition(UserRetriever) is UserDefinition user))
            {
                result.Permissions = new Dictionary <string, bool>();
                return(result);
            }

            result.Username    = user.Username;
            result.DisplayName = user.DisplayName;
            result.IsAdmin     = user.Username == "admin";

            result.Permissions = Cache.GetLocalStoreOnly("ScriptUserPermissions:" + user.Id, TimeSpan.Zero,
                                                         UserPermissionRow.Fields.GenerationKey, () =>
            {
                var permissions = new Dictionary <string, bool>(StringComparer.OrdinalIgnoreCase);

                var permissionsUsedFromScript = Cache.GetLocalStoreOnly("PermissionsUsedFromScript",
                                                                        TimeSpan.Zero, RoleRow.Fields.GenerationKey, () =>
                {
                    return(UserPermissionRepository.ListPermissionKeys(Cache.Memory, TypeSource)
                           .Where(permissionKey =>
                    {
                        // this sends permission information for all permission keys to client side.
                        // if you don't need all of them to be available from script, filter them here.
                        // this is recommended for security / performance reasons...
                        return true;
                    }).ToArray());
                });

                foreach (var permissionKey in permissionsUsedFromScript)
                {
                    if (Permissions.HasPermission(permissionKey))
                    {
                        permissions[permissionKey] = true;
                    }
                }

                return(permissions);
            });

            return(result);
        }
コード例 #13
0
        public PresetUserPermissionModel(IUnitOfWork uow, UserBase user)
        {
            this.user = user;
            this.uow  = uow;

            originalPermissionList    = UserPermissionRepository.GetUserAllPresetPermissions(uow, user.Id);
            ObservablePermissionsList = new GenericObservableList <PresetUserPermission>(originalPermissionList.ToList());

            originalPermissionsSourceList = PermissionsSettings.PresetPermissions.Values.ToList();

            //убираем типы уже загруженные в права
            foreach (var item in originalPermissionList.Where(x => !x.IsLostPermission))
            {
                if (originalPermissionsSourceList.Contains(item.PermissionSource))
                {
                    originalPermissionsSourceList.Remove(item.PermissionSource);
                }
            }
            ObservablePermissionsSourceList = new GenericObservableList <PresetUserPermissionSource>(originalPermissionsSourceList);
        }
コード例 #14
0
        public EntityUserPermissionModel(IUnitOfWork uow, UserBase user, PermissionListViewModel permissionListViewModel)
        {
            this.user = user;
            this.uow  = uow;
            this.PermissionListViewModel = permissionListViewModel ?? throw new NullReferenceException(nameof(permissionListViewModel));

            permissionList = UserPermissionRepository.GetUserAllEntityPermissions(uow, user.Id, permissionListViewModel.PermissionExtensionStore);
            PermissionListViewModel.PermissionsList = new GenericObservableList <IPermissionNode>(permissionList.OfType <IPermissionNode>().ToList());
            PermissionListViewModel.PermissionsList.ElementRemoved += (aList, aIdx, aObject) => DeletePermission(aObject as UserPermissionNode);

            originalTypeOfEntityList = TypeOfEntityRepository.GetAllSavedTypeOfEntity(uow).ToList();
            //убираем типы уже загруженные в права
            foreach (var item in permissionList)
            {
                if (originalTypeOfEntityList.Contains(item.TypeOfEntity))
                {
                    originalTypeOfEntityList.Remove(item.TypeOfEntity);
                }
            }
            SortTypeOfEntityList();
            ObservableTypeOfEntitiesList = new GenericObservableList <TypeOfEntity>(originalTypeOfEntityList);
        }
コード例 #15
0
        public ActionResult EditUserPermission(int?id)
        {
            if (id == null)
            {
                return(RedirectToAction("DetailsUserPermission"));
            }

            var model = new EditAppUserPermissionViewModel();

            using (var context = new AppSecurityContext())
            {
                var actionRepository       = new ActionRepository(context);
                var resourceRepository     = new ResourceRepository(context);
                var userPermissionRository = new UserPermissionRepository(context);
                var userRepository         = new UserRepository(context);

                var userPermision = userPermissionRository.GetAll().Where(x => x.Id == id).FirstOrDefault();
                var resource      = resourceRepository.Find(userPermision.Permission.ResourceKey);

                var userPermissions = userPermissionRository.GetAll()
                                      .Where(x => x.UserId == userPermision.UserId)
                                      .Where(x => x.Permission.ResourceKey == resource.Key)
                                      .ToList();


                var actionKeys = userPermissions.Select(x => x.Permission.ActionKey).ToArray();
                var actions    = actionRepository.GetAll();

                model.AvailableActions = mapper.Map <ICollection <AppActionViewModel> >(actions);
                model.SelectedActions  = actionKeys;
                model.ResourceKey      = resource.Key;
                model.ResourceName     = resource.Name;
                model.User             = mapper.Map <AppUserViewModel>(userRepository.Find(userPermision.UserId));

                return(View(model));
            }
        }
コード例 #16
0
 protected override IDictionary <string, HashSet <string> > GetData()
 {
     return(UserPermissionRepository.GetImplicitPermissions(cache, typeSource));
 }
コード例 #17
0
 protected override IEnumerable <string> GetData()
 {
     return(UserPermissionRepository.ListPermissionKeys(cache, typeSource));
 }
コード例 #18
0
        public ActionResult EditUserPermission(int id, EditAppUserPermissionViewModel model)
        { //Clave del resource
            using (var context = new AppSecurityContext())
            {
                var actionRepository       = new ActionRepository(context);
                var resourceRepository     = new ResourceRepository(context);
                var permissionRepository   = new PermissionRepository(context);
                var userPermissionRository = new UserPermissionRepository(context);
                try
                {
                    var userPermision = userPermissionRository.GetAll().Where(x => x.Id == id).FirstOrDefault();

                    var actions  = actionRepository.GetAll();
                    var resource = resourceRepository.Find(userPermision.Permission.ResourceKey);

                    var permissions = userPermissionRository.GetAll()
                                      .Where(x => x.Permission.ResourceKey == resource.Key)
                                      .Where(x => x.UserId == userPermision.UserId);

                    var actionKeys = permissions.Select(x => x.Permission.ActionKey).ToArray();
                    model.AvailableActions = mapper.Map <ICollection <AppActionViewModel> >(actions);

                    //Se eliminan los permisos anteriores
                    foreach (var perm in permissions)
                    {
                        userPermissionRository.Delete(perm);
                    }

                    if (model.SelectedActions != null)
                    {
                        //Se agregan los nuevos
                        var permissionForInsert = permissionRepository
                                                  .GetAll()
                                                  .Where(x => x.ResourceKey == resource.Key)
                                                  .Where(x => model.SelectedActions.Contains(x.ActionKey));

                        foreach (var p in permissionForInsert)
                        {
                            var permission = new AppUserPermission();
                            permission.UserId       = userPermision.UserId;
                            permission.PermissionId = p.Id;
                            userPermissionRository.Insert(permission);
                        }
                        model.SelectedActions = actionKeys;
                        model.ResourceKey     = resource.Key;
                        model.ResourceName    = resource.Name;
                    }
                    context.SaveChanges();
                    return(RedirectToAction("UserPermission", new { id = model.User.Id }));
                }
                catch (Exception ex)
                {
                    ViewBag.Error = ex.Message;
                    if (ex.InnerException != null)
                    {
                        ViewBag.Error += ex.InnerException.Message;
                    }
                    return(View(model));
                }
            }
        }